柒兲 发表于 2007-11-7 13:09

[讨论]二叉树操做

<P>#include &lt;stdio.h&gt;<BR>#include &lt;malloc.h&gt;</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",&amp;num,&amp;str);<BR>    getchar();<BR>    while(num!=0 &amp;&amp; str !='#')<BR>    {<BR>        p=(BTnode *)malloc(sizeof(BTnode));<BR>        p-&gt;ch=str;<BR>        p-&gt;lchild=p-&gt;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]-&gt;lchild=p;<BR>            else<BR>                a[j]-&gt;rchild=p;<BR>        }<BR>        scanf("%d,%c",&amp;num,&amp;str);<BR>        getchar();<BR>    }<BR>    return root;<BR>}</P>
<P>void Preorder(BTnode *p)//先根遍历<BR>{<BR>    if(p)<BR>    {<BR>        printf("-&gt;%c",p-&gt;ch);<BR>        Preorder(p-&gt;lchild);<BR>        Preorder(p-&gt;rchild);<BR>    }<BR>}<BR>void Inorder(BTnode *p)//中根遍历<BR>{<BR>    if(p)<BR>    {<BR>        Inorder(p-&gt;lchild);<BR>        printf("-&gt;%c",p-&gt;ch);<BR>        Inorder(p-&gt;rchild);<BR>    }<BR>}<BR>void Posorder(BTnode *p)//先根遍历<BR>{<BR>    if(p)<BR>    {    <BR>        Posorder(p-&gt;lchild);<BR>        Posorder(p-&gt;rchild);<BR>        printf("-&gt;%c",p-&gt;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>

nearforest 发表于 2007-11-8 16:28

<P>创建二叉树` 和遍历二叉树` </P>
<P>但是输入创建的时候`` 只能依次输入 编号的值`` 那位师兄有方法`可以随机输入每个结点的内容?<BR><BR>什么意思?<BR><BR>如果你不想输入编号,可以依次输入值,按值个数来构造树. 或者构造有序的二叉树,随机输入些值,进行构造..</P>

柒兲 发表于 2007-11-8 17:57

回复:(nearforest)创建二叉树` 和遍历二叉树` 但...

谢谢你了哦``<BR>因为我这个程序`只能输入 1,A <BR>                        2,B<BR>                        3,C<BR>                        5,D 这样的` 还不能乱了顺序!如果乱了`就创建不了<BR>                    数字是每个结点的编号,我是通过编号来实现判断的`<BR>                     如果 1 就是根结点``<BR>                   然后才判断 那个就他的右孩子和左孩子,最后进行连接``<BR><BR>    我想要解决的就是`  不这样输入,比如` 想输入那个字符就输那个字符``最后建立二叉树!<BR> <BR> <BR>   谢谢你给我的提醒` 我在试下`!

页: [1]

编程论坛