zoukankan      html  css  js  c++  java
  • 二叉树链式存储结构

    #include <stdio.h>
    #include <stdlib.h>
    
    #define TRUE 1
    #define FALSE 0
    #define OVERFLOW -2
    #define OK 1
    #define ERROR 0
    
    typedef int Status;
    typedef int TElemType;
    
    /*
     * 存储结构
     */
    typedef struct BiTNode
    {
        TElemType data;    //数据
        struct BiTNode *lchild, *rchild;
    }BiTNode, *BiTree;
    
    /*
     * 创建二叉树,输入0表示创建空树
     */
    Status CreateBiTree(BiTree *T)
    {
        TElemType e;
        scanf("%d", &e);
        if (e == 0)
        {
            *T = NULL;
        }
        else
        {
            *T = (BiTree) malloc(sizeof(BiTNode));
            if (!T)
            {
                exit(OVERFLOW);
            }
            (*T)->data = e;
            CreateBiTree(&(*T)->lchild);    //创建左子树
            CreateBiTree(&(*T)->rchild);    //创建右子树
        }
        return OK;
    }
    
    /*
     * 访问元素
     */
    void visit(TElemType e)
    {
        printf("%d ", e);
    }
    
    /*
     * 先序遍历二叉树:指先访问根,然后访问孩子的遍历方式
     */
    Status PreOrderTraverse(BiTree T, void (*visit)(TElemType))
    {
        if (T)
        {
            visit(T->data);
            PreOrderTraverse(T->lchild, visit);
            PreOrderTraverse(T->rchild, visit);
        }
    }
    
    /*
     * 中序遍历二叉树:指先访问左(右)孩子,然后访问根,最后访问右(左)孩子的遍历方式
     */
    Status InOrderTraverse(BiTree T, void (*visit)(TElemType))
    {
        if (T)
        {
            InOrderTraverse(T->lchild, visit);
            visit(T->data);
            InOrderTraverse(T->rchild, visit);
        }
    }
    
    /*
     * 后序遍历二叉树:指先访问孩子,然后访问根的遍历方式
     */
    Status PostOrderTraverse(BiTree T, void (*visit)(TElemType))
    {
        if (T)
        {
            PostOrderTraverse(T->lchild, visit);
            PostOrderTraverse(T->rchild, visit);
            visit(T->data);
        }
    }
    
    int main()
    {
        BiTree T;
        printf("创建树,输入0为空树:
    ");
        CreateBiTree(&T);
        printf("先序遍历:");
        PreOrderTraverse(T, *visit);
        printf("
    中序遍历:");
        InOrderTraverse(T, *visit);
        printf("
    后序遍历:");
        PostOrderTraverse(T, *visit);
        printf("
    ");
    
        return 0;
    }
  • 相关阅读:
    hdu 2489 dfs枚举组合情况+最小生成树
    hdu3938 Portal 离线的并查集
    hdu3926 Hand in Hand 判断同构
    hdu1811 Rank of Tetris 拓扑排序+并查集
    poj3083 Children of the Candy Corn 深搜+广搜
    HDU 2529 Shot (物理数学题)
    HDU 4576 Robot(概率dp)
    HDU 2672 god is a girl (字符串处理,找规律,简单)
    HDU 2669 Romantic(扩展欧几里德, 数学题)
    HDU 2671 Can't be easier(数学题,点关于直线对称)
  • 原文地址:https://www.cnblogs.com/kxzh/p/10919955.html
Copyright © 2011-2022 走看看