[讨论]二叉树操做
<P>#include <stdio.h><BR>#include <malloc.h></P><P>typedef struct btnode<BR>{<BR> char ch;<BR> struct btnode *lchild,*rchild;<BR>}BTnode;</P>
<P>BTnode *Create()<BR>{<BR> BTnode *root,*p,*a[100];<BR> int num;<BR> char str;<BR> int j=0;<BR> printf("\n");<BR> printf("请输入你要创建树结点的编号和值(请以0和#结束)\n");<BR> printf("i,string\n");<BR> scanf("%d,%c",&num,&str);<BR> getchar();<BR> while(num!=0 && str !='#')<BR> {<BR> p=(BTnode *)malloc(sizeof(BTnode));<BR> p->ch=str;<BR> p->lchild=p->rchild=NULL;<BR> a[num]=p;<BR> if(num==1) <BR> root=p;<BR> else<BR> {<BR> j=num/2;<BR> if(num%2==0)<BR> a[j]->lchild=p;<BR> else<BR> a[j]->rchild=p;<BR> }<BR> scanf("%d,%c",&num,&str);<BR> getchar();<BR> }<BR> return root;<BR>}</P>
<P>void Preorder(BTnode *p)//先根遍历<BR>{<BR> if(p)<BR> {<BR> printf("->%c",p->ch);<BR> Preorder(p->lchild);<BR> Preorder(p->rchild);<BR> }<BR>}<BR>void Inorder(BTnode *p)//中根遍历<BR>{<BR> if(p)<BR> {<BR> Inorder(p->lchild);<BR> printf("->%c",p->ch);<BR> Inorder(p->rchild);<BR> }<BR>}<BR>void Posorder(BTnode *p)//先根遍历<BR>{<BR> if(p)<BR> { <BR> Posorder(p->lchild);<BR> Posorder(p->rchild);<BR> printf("->%c",p->ch);<BR> }<BR>}</P>
<P>void main()<BR>{<BR> BTnode *head;<BR> head=Create();<BR> printf("先根遍历,结果为 :");<BR> Preorder(head);<BR> printf("\n");<BR> printf("中根遍历,结果为 :");<BR> Inorder(head);<BR> printf("\n");<BR> printf("后根遍历,结果为 :");<BR> Posorder(head);<BR> printf("\n");<BR>}<BR><BR>创建二叉树` 和遍历二叉树` <BR><BR>但是输入创建的时候`` 只能依次输入 编号的值`` 那位师兄有方法`可以随机输入每个结点的内容?<BR></P>
<P>但是输入创建的时候`` 只能依次输入 编号的值`` 那位师兄有方法`可以随机输入每个结点的内容?<BR><BR>什么意思?<BR><BR>如果你不想输入编号,可以依次输入值,按值个数来构造树. 或者构造有序的二叉树,随机输入些值,进行构造..</P>
回复:(nearforest)创建二叉树` 和遍历二叉树` 但...
谢谢你了哦``<BR>因为我这个程序`只能输入 1,A <BR> 2,B<BR> 3,C<BR> 5,D 这样的` 还不能乱了顺序!如果乱了`就创建不了<BR> 数字是每个结点的编号,我是通过编号来实现判断的`<BR> 如果 1 就是根结点``<BR> 然后才判断 那个就他的右孩子和左孩子,最后进行连接``<BR><BR> 我想要解决的就是` 不这样输入,比如` 想输入那个字符就输那个字符``最后建立二叉树!<BR> <BR> <BR> 谢谢你给我的提醒` 我在试下`!页:
[1]
