c语言二叉树

Python022

c语言二叉树,第1张

#include <stdlib.h>

#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 /