二叉树的创建:
#方法创建树:
3用遍历方法遍历出一颗树。如果叶子节点上是空的话,就补上#号如下图所示:
- 先序遍历:124###3##
- 中序遍历:#4#2#1#3#
- 后序遍历:##4#2##31
代码实现:
BiTNode * CreateBiThrTree(BiTNode * T)
{
//创建
BiTNode *node = NULL;
BiTNode *pL = NULL;
BiTNode *PR = NULL;
char h;
scans("%c",&h);
if(h=='#')
{
return NULL;
}
else
{
node = (BiTNode *)malloc(sizeof(BiTNode));
memset(node,0,sizeof(BiTNode));
node->data = h;
CreateBiThrTree(T->lchild);//递归构造左子树
if(PL != NULL)
{
node ->lchild = PL;
}
else
{
node->lchild = NULL;
}
CreateBiThrTree(T->rchild);//递归构造右子树
if(PR != NULL)
{
node ->Rchild = PR;
}
else
{
node->Rchild = NULL;
}
}
return node;
}
int main()
{
BiTNode t1,t2,t3,t4,t5;
memset(&t1,0,sizeof(BiTNode));
memset(&t2,0,sizeof(BiTNode));
memset(&t3,0,sizeof(BiTNode));
memset(&t4,0,sizeof(BiTNode));
memset(&t5,0,sizeof(BiTNode));
t1.data = 1;
t2.data = 2;
t3.data = 3;
t4.data = 4;
t5.data = 5;
//建立关系
t1.lchild = &t2;
t1.rchild = &t3;
t2.lchild = &t4;
t3.lchild = &t5;
//作用域
//可以添加临时的指针变量
[
BiTNode * p = NULL;
p = CreateBiThrTree(p);
]
//树的遍历
printf("%d\n",Depth(&t1));
[
BiTNode *root = CoptTree(&t1);//生成一颗新树
printf("Copy inorder\n");
inOrder(root);
printf("hello....\n");
]
printf("older inorder\n");
inOrder(&t1);
printf("hello....\n");
return;
}