回 帖 发 新 帖 刷新版面

主题:不能输出前序遍历的值

各位大侠帮忙看下小弟的前序建立二叉树并前序遍历二叉树的程序,程序运行结果不对,请大家帮忙改一下,谢谢啦,我用的是windowTC
#include<stdio.h>
#include<malloc.h>
#define OK 1
#define OVERFLOW -1
typedef struct BiTNode
{
 char data;
 struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int CreatBiTree(BiTree T)
{
 char ch;
 scanf("%c",&ch);
 if(ch==' ')
 T=NULL;
 else
 {
  if(!(T=(BiTree *)malloc(sizeof(BiTNode))))
  exit(OVERFLOW);
  T->data=ch;
  CreatBiTree(T->lchild);
  CreatBiTree(T->rchild);
 }
 return OK;
}
int PreBiTree(BiTree T)
{
 if(T!=NULL)
 {
  printf("%c",T->data);
  getch();
  PreBiTree(T->lchild);
  getch();
  PreBiTree(T->rchild);
  getch();
 }
 return OK;
}
void main()
{
 BiTree T;
 printf("Enter the element: \n");
 CreatBiTree(T);
 PreBiTree(T);
 getch();
}

回复列表 (共2个回复)

沙发

int CreatBiTree(BiTree T)
这个函数错了,返回值一定是节点才可以这样递归。
递归的时候
 CreatBiTree(T->lchild);
  CreatBiTree(T->rchild);
这样写也是不对的!
要写成T=CreatBiTree(T->lchild);的形式!
以上这些是导致没有办法形成完整的树。


同时你没有释放动态分配的存储空间的函数。

板凳

楼上的专家真实大牛人!这个问题也困扰我很久了,楼主显然和我一样是受了那本严某经典的教材的影响!
照牛人说的改了以后程序果然可以正常运行!!!

我来回复

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