C语言中的一个小问题(高手请进)

来源:百度知道 编辑:UC知道 时间:2024/05/16 02:57:26
我在练习C程序时出现这样一个问题:
#include <iostream.h>

struct bitree
{
int data;
bitree *lchild;
bitree *rchild;
};

void preorder(bitree *root);
void postorder(bitree *root);
bitree *createtree();

bitree *createtree()
{
int a;
cin >> a;
if( a != 0 )
{
bitree *q = new bitree;
q -> data = a;
q -> lchild = createtree();
q -> rchild = createtree();
return q;
}
else
return NULL;
}

inline void preorder( bitree *root )
{
if( root != NULL )
{
cout << root -> data << " ";
preorder( root -> lchild );
preorder( root -> rchild );
}
}

inline void postorder( bitree *root )
{
if( root != NULL )
{
postorder( root -> lchild );
postorder( root -> rchild );
cout << root -> data <<

你是想要生成一棵二叉树并先序后序递归遍历,首先你的
while(1)
{
}是死循环,不该出现,而树的生成的根节点是由外部给出的,不能是在内部生成的,生成树算法如下
typedef bitree* BiTree
bool CreateBiTree(BiTree *T)
{
int a;
cin >> a;
if( a == 0 )
(*T) = NULL;
else
{
(*T) = (BiTree)malloc(sizeof(bitree));
(*T)->data = a;
CreateBiTree( &(*T)->lchild ); //递归创建左子树
CreateBiTree( &(*T)->rchild ); //递归创建右子树
}
return 1;
}此时T是指向树节点的指针,CreateBiTree(BiTree *T)传入的是指针的地址,相当于指针是一个变量,先序和后序算法无误

你说的意外情况是怎样的一种状况啊?