您的位置:首页 > 其它

二叉树的建立及遍历

2013-11-19 18:41 190 查看
首先定义二叉树链表的节点结构:

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的地址值。输出结果如下图所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: