一个用C语言编写的二叉树问题
全部代码如下:
#include <stdio.h>
#include <iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAX_TREE_SIZE 100
typedef int Status;
typedef int TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *rchild,*lchild;
}BiTNode, *BiTree;
Status CreateBiTree(BiTree &T){
TElemType ch;//我的TElemType 设置为int
scanf("%d",&ch);//输入一个Int类型的数字,空格,再输入两个数字,回车,无反应。
if(ch==' ')
T=NULL;
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
void Preorder(BiTree T)
{
if(T)
{
printf("%d", T->data);//先序遍历 输出根节点
Preorder(T->lchild);//先序遍历 输出左节点
Preorder(T->rchild);//先序遍历 输出右节点
}
}
void main()
{
BiTree T;
CreateBiTree(T);
Preorder(T);
}
//整段程序在C编译器下,可以运行,就是,执行不了,Preorder函数
//没有输出 C 二叉树 遍历
[解决办法]
if(ch==' ')这里是不是有些问题 ch是int型 所以我觉得改成if(ch==INFEASIBLE)比较合适 其它的没啥问题
你设计的其实都对了 运行不了可能是你数据输入的不对
例如: 3
1 2
4 5
你得输入3 1 4 -1 -1 5 -1 -1 2 -1 -1 然后按回车
你试试 我就不截结果图了
[解决办法]
我认为你已经定义了TElemType为int那么if(ch==' ')这一句等号右边应该是代表该节点为空时的数字,比如说0.