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;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试