#include<malloc.h>
typedef struct node
{
char data
struct node *lchild
struct node *rchild
}tnode
tnode *createtree()
{
tnode *t
char ch
ch=getchar()
if(ch=='0')
t=NULL
else
{
t=(tnode *)malloc(sizeof(tnode))
t->data=ch
t->lchild=createtree()
t->rchild=createtree()
}
return t
}
void listtree(tnode *t)
{
if (t!=NULL)
{
printf("%c",t->data)
if(t->lchild!=NULL||t->rchild!=NULL)
{
printf("(")
listtree(t->lchild)
if(t->rchild!=NULL)
printf(",")
listtree(t->rchild)
printf(")")
}
}
}
void inorder(tnode *t)
{
if(t!=NULL)
{
inorder(t->lchild)
printf("%c\t",t->data)
inorder(t->rchild)
}
}
void leve(tnode *t)
{
tnode *quee[100]
int front,rear
front=-1
rear=0
quee[rear]=t
while(front!=rear)
{
front++
printf("%c\t",quee[front]->data)
if(quee[front]->lchild!=NULL)
{
rear++
quee[rear]=quee[front]->lchild
}
if(quee[front]->rchild!=NULL)
{
rear++
quee[rear]=quee[front]->rchild
}
}
}
main()
{
tnode *t=NULL
printf("请输入二叉树元素:")
t=createtree()
printf("广义表的输出:")
listtree(t)
printf("\n")
printf("二叉树的中序遍历:")
inorder(t)
printf("\n")
printf("二叉树的层次遍历:")
leve(t)
printf("\n")
system("pause")
}
/*
输入:AB00CD00E00F000
输出:A(B,C((D,E))
中序遍历: B A D C E
层次遍历:A B C D E
*/
另外,团IDC网上有许多产品团购,便宜有口碑
首先我们知道,前序遍历的规则是:根结点→左子结点→右子结点 中序遍历是:左子结点→根结点→右子结点 后序遍历是:左子结点→右子结点→根结点 那么,对于一棵二叉树,前序遍历的第一个结点一定是这棵树的根结点,即根结点是a。 在中序遍历的顺序dgbaechf中,以a分成左、右两边,左边是dgb,右边是echf。 所以,这棵树现在可以确定如下: a / \ dgb echf 接下来再分别对左子树和右子树进行类似的操作。 对于左子树dgb来说,在前序遍历abdgcefh中找到bdg,证明这子树的根是b,那么现在可以确定的树结构如下: a / \ b echf / dg 再看dg,前序遍历中的顺序为dg,所以d是dg这部分子树的根,那么又因为中序遍历的dg顺序也是dg,所以g是右子结点。 即: a / \ b echf / d \ g 现在看echf这部分子树,前序中顺序是cefh,所以子树根结点是c,那么左子结点是e,右子树是hf: 得到: a / \ b c /