急求二叉树的创建和递归遍历程序代码C++

如题所述

第1个回答  2019-12-23
ps:该程序包含二叉树的建立,以及前序遍历、中序遍历、后续遍历。
如有不懂,我再详解
#include<stdio.h>
#include<stdlib.h>
typedef
struct
node
{
char
data;
struct
node
*lchild,*rchild;
}binary_tree,*tree;
void
creat_tree(tree
&t)
{
char
ch;
ch=getchar();
//使用if((ch=getchar())=='#')
或者ch=getchar();都只能一下子输入所有字符,而用c语言的cin可以一个个输入。
if(ch=='#')
t=NULL;
//表示空子树
else
{
t=(binary_tree*)malloc(sizeof
(binary_tree));
//
如果用c++语言
t=new
binary_tree;
if(!t)
exit(1);
//exit(1)表示异常退出.这个1是返回给操作系统的不过在DOS好像不需要这个返回值
;exit(0)表示正常退出
t->data=ch;
creat_tree(t->lchild);
creat_tree(t->rchild);
}
}
void
pre_travel(tree
&t)
//前序遍历:根结点->左子树->右子树
{
if(t)
{
printf("%c",t->data);
pre_travel(t->lchild);
pre_travel(t->rchild);
}
}
void
mid_travel(tree
&t)
//中序遍历:左子树->根结点->右子树
{
if(t)
{
mid_travel(t->lchild);
printf("%c",t->data);
mid_travel(t->rchild);
}
}
void
post_travel(tree
&t)
//后序遍历:左子树->右子树->根结点
{
if(t)
{
post_travel(t->lchild);
post_travel(t->rchild);
printf("%c",t->data);
}
}
void
main()
{
tree
t;
printf("输入二叉树的数据(#
代表
空子树).
比如:
fca##db###e#gh##p##\n");
creat_tree(t);
printf("前序遍历:\n");
pre_travel(t);
printf("\n");
printf("中序遍历:\n");
mid_travel(t);
printf("\n");
printf("后续遍历:\n");
post_travel(t);
printf("\n");
}
相似回答