liuyawen44 2015-11-04 16:06 采纳率: 37.5%
浏览 3635

树的括号表示法怎么写

#include
#include
#include
using namespace std;
struct treenode
{
char data;
treenode firstchild;
treenode *nextsibling;
};
treenode * creat_tree(char
&a)
{ if((*a)==',')
{
a++;
}
if((*a)=='\0')
return NULL;
if((*a)==')')
{
a++;
return NULL;
}
if((*a)=='(')
{
a++;
}
treenode t=new treenode();
t->data=
(a++);
t->firstchild=creat_tree(a);
t->nextsibling=creat_tree(a);
return t;
}
void show_tree(treenode *t)
{ //cout<<"123";
if(t==NULL)
return;
cout<data;
for(treenode *p=t->firstchild;p!=NULL;p=p->nextsibling)
{
show_tree(p);
}
}
int main()
{ //char ch[100];
char *a;//[100];
gets(a);
// puts(a);
treenode *t=creat_tree(a);
show_tree(t);
}

我写了一个,但又明显错误,希望大神能帮我改进。。

  • 写回答

1条回答 默认 最新

  • threenewbee 2015-11-04 23:05
    关注
     #include<stdio.h>
    #include<stdlib.h>
    #include<memory.h>
    
    typedef struct BiTNode {
        char data;
        struct BiTNode *lchild;
        struct BiTNode *rchild; 
    } *BiTree;
    
    BiTree CreateBiTree(BiTree T){
        char ch;
        scanf("%c",&ch);
        if (ch=='#'){ 
            return NULL; 
        }else {
            T = (BiTree)malloc(sizeof(struct BiTNode)) ;     
            T->data = ch;
            T->lchild=CreateBiTree(T->lchild);   
            T->rchild=CreateBiTree(T->rchild);    
            return T;
        }
    }
    
    
    void PreOrder(BiTree &T){
        if(T){                      
            printf("%c ",T->data);  
            PreOrder(T->lchild);   
            PreOrder(T->rchild);    
        }
    }
    
    void InOrder(BiTree &T){
        if(T){                     
            InOrder(T->lchild); 
            printf("%c ",T->data);  
            InOrder(T->rchild); 
        }
    }
    
    void PostOrder(BiTree &T){
        if(T){                     
            PostOrder(T->lchild);
            PostOrder(T->rchild);    
            printf("%c ",T->data);
    
        }
    }
    
    void ShowBiTree(BiTree  &bt)
    {
        if (bt!=NULL){
            printf("%c",bt->data);
            if (bt->rchild!=NULL||bt->lchild!=NULL){
                printf("(");
                ShowBiTree(bt->lchild);
                if (bt->rchild!=NULL){
                    printf(",");
                }
                ShowBiTree(bt->rchild);
                printf(")");
            }
        }
    }
    
    int main()
    {
        printf("请依次输入字符: \n");
        BiTree T;
        T = CreateBiTree(T);
        printf("先序遍历: \n");
        PreOrder(T);
        printf("\n中序遍历: \n");
        InOrder(T);
        printf("\n后序遍历: \n");
        PostOrder(T);
        printf("\n用括号表示法输出二叉树:\n");
        ShowBiTree(T);
        printf("\n");
        system("pause");
        return 0;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!