二叉树的建立及遍历

来源:互联网 发布:udp端口号可选范围 编辑:程序博客网 时间:2024/05/19 17:09

         首先定义二叉树链表的节点结构:

typedef char TElemType;typedef struct BiTNode{TElemType data;struct BiTNode *lchild, *rchild;} BiTNode, *BiTree;

        先序遍历创立二叉树链表,

void CreateBiTree(BiTree *T){TElemType ch;scanf("%c", &ch);if(ch == '#')*T = NULL;else{*T = (BiTree)malloc(sizeof(BiTNode));if(!*T)exit(OVERFLOW);(*T)->data = ch;CreateBiTree(&(*T)->lchild);CreateBiTree(&(*T)->rchild);}      

上面的代码是当输入字符'#'时,当前节点为叶子,不再继续生成子节点,还要注意这个创建函数中的形参,是指向BiTree的指针,实际上是指向BiTNode的一个二级指针。

遍历函数如下:

        前序遍历:

void PreOrderTraverse(BiTree T){if(T == NULL)return;printf("%c", T->data);PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);}

        中序遍历:

void InOrderTraverse(BiTree T){if(T == NULL)return;InOrderTraverse(T->lchild);printf("%c", T->data);InOrderTraverse(T->rchild);}

     后序遍历:

void PostOrderTraverse(BiTree T){if(T == NULL)return;PostOrderTraverse(T->lchild);PostOrderTraverse(T->rchild);printf("%c", T->data);}

验证代码:

BiTree Tree;CreateBiTree(&Tree);PreOrderTraverse(Tree);cout << endl;InOrderTraverse(Tree);cout << endl;PostOrderTraverse(Tree);cout << endl;

这里需要注意的是CreateBiTree函数中输入的参数值,输入Tree的地址值。输出结果如下图所示:


    

原创粉丝点击