回 帖 发 新 帖 刷新版面

主题:求二叉树的创建,遍历,应用的源程序(表示一个表达式,求树的深度),谢了。

各位大虾,帮忙了!

回复列表 (共3个回复)

沙发


#include <stdio.h>

typedef struct btnode
{
 char data;
 struct btnode *lchild;
 struct btnode *rchild;
}bttree;

void tree(bttree **t)
{
 char ch;
 scanf("%c",&ch);getchar();
 if (ch=='0')
    {
     *t=NULL;
     return;
    }
 else
   {
    (*t)=(bttree*)malloc(sizeof(bttree));
    (*t)->data=ch;
    tree(&(*t)->lchild);
    tree(&(*t)->rchild);
   }
}


void Inordertraverse(bttree *t)
{
 if (t->data!=NULL)
   {
    
    Inordertraverse(t->lchild);
    printf("%c",t->data);
   Inordertraverse(t->rchild);
   }
}

int hightree(bttree *t)
{int H,H1,H2;
    if(t==NULL) H=0;
    else
    {H1= hightree(t->lchild);
        H2= hightree(t->rchild);
        H=(H1>H2?H1:H2)+1;
    }
    return H;
}

main()
{int H;
 bttree *t;
 tree(&t);
 printf("\n");
Inordertraverse(t);
H=hightree(t);
printf("%d",H);
}

板凳


谢谢啦,
小弟先试试啊!

3 楼


那二叉树我也是那样创建的,如下:
#include<iostream>
#include<stdlib.h>
using namespace std;
#define  stack_init_size   100
#define  stackincrement    10
#define OVERFLOW  -1
typedef int status;
typedef int telemtype;//数据类型
typedef struct bitnode
{
    telemtype      data;
    struct bitnode *lchild,*rchild;
}bitnode,*bitree;
int createbitree (bitree &T)
 {                                           
        char ch;
        fflush(stdin);
        getchar();
        cin>>ch;
        if((ch=getchar())==' ') T=NULL;      //空树
        else{                                //读人非空格
              if(!(T=(bitnode *)malloc(sizeof(bitnode)))) exit(OVERFLOW);  //生成结点
              T->data=ch;
              createbitree(T->lchild);
              createbitree(T->rchild);       //构造右子树
             }
        return 1;
 }
但是却不能生成,为什么??
比如说输入一个先序二叉树ABD  C  E  ,这就是一个二叉树,但是最后按了两个空格键后却没有直接返回1,而是可以继续输入字符,不知道为什么,请指导,谢谢,知道的请速回!

我来回复

您尚未登录,请登录后再回复。点此登录或注册