您的位置:首页 > 理论基础 > 数据结构算法

数据结构(二叉树系列)先序创建三种遍历和求深度(递归实现)

2014-11-12 20:21 609 查看
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef struct BiTNode{ // 二叉树结点结构
char data;            // 结点数据
struct BiTNode *lchild;        // 左孩子
struct BiTNode *rchild;        // 右孩子
}BiTNode,*BiTree;

BiTree CreateBiTree(BiTree T);
void TraversalBiTree1(BiTree T);
void TraversalBiTree2(BiTree T);
void TraversalBiTree3(BiTree T);
int Deep(BiTree T);

int main(void)
{ BiTree T=NULL;
T=CreateBiTree(T);
printf("先序遍历:\n");
TraversalBiTree1(T);
printf("\n");
printf("中序遍历:\n");
TraversalBiTree2(T);
printf("\n");
printf("后序遍历:\n");
TraversalBiTree3(T);
printf("\n");
printf("树的深度:%d",Deep(T));

return 0;
}

BiTree CreateBiTree( BiTree T)//先序递归创建
{
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
exit(-1);

T->data=ch;                    // 生成根节点
T->lchild=CreateBiTree(T->lchild);// 构造左子树
T->rchild=CreateBiTree(T->rchild);// 构造右子树
}
return T;
}

void TraversalBiTree1( BiTree T)//先序遍历
{
if(T == NULL)
return;
printf("%c ",T->data);
TraversalBiTree1(T->lchild);
TraversalBiTree1(T->rchild);

}

void TraversalBiTree2( BiTree T)//中序遍历
{
if(T == NULL)
return;
TraversalBiTree2(T->lchild);
printf("%c ",T->data);
TraversalBiTree2(T->rchild);

}

void TraversalBiTree3( BiTree T)//后序遍历
{
if(T == NULL)
return;
TraversalBiTree3(T->lchild);
TraversalBiTree3(T->rchild);
printf("%c ",T->data);

}

int Deep(BiTree T)//求深度
{
int lchild,rchild;
if(T == NULL)
return 0;
lchild = 1 + Deep(T->lchild);
rchild = 1 + Deep(T->rchild);
return lchild>rchild?lchild:rchild;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐