请进来看看这个先序遍历二叉树的程序解决方案

请进来看看这个先序遍历二叉树的程序
#include   <iostream.h>
#include   <stdio.h>
#include   <malloc.h>

#define   MAXSIZE 100

struct   BiTNode
{
char   data;
struct   BiTNode   *lchild,   *rchild;
};

BiTNode   *BiTree;

void   CreateBiTree(BiTNode   *BiTree) //先序递归构造二叉树
{
char   ch;    
cout < < "输入节点数据(char   型)(空格代表NULL): ";     //这句要把数据
//全部输入后才会显示出来     不知道为什么?
ch   =   getchar();
if(ch   ==   '   ') //若为叶子节点则其左右孩子均为空
BiTree   =   NULL;
else
{
BiTree   =   (BiTNode   *)malloc(sizeof(BiTNode));
BiTree-> data   =   ch; //生成根节点
CreateBiTree(BiTree-> lchild); //构造左子树
CreateBiTree(BiTree-> rchild); //构造右子树
}
}

void   PreOrderTraverse(BiTNode   *BiTree) //先序遍历二叉树并输出
{
if(BiTree)
{
cout < < "   " < <BiTree-> data;
if(BiTree-> lchild)
{
PreOrderTraverse(BiTree-> lchild);
if(BiTree-> rchild)
PreOrderTraverse(BiTree-> rchild);
}
}
}

void   main()
{
BiTree   =   (BiTNode   *)malloc(MAXSIZE   *   sizeof(BiTNode));
BiTree   =   NULL;
CreateBiTree(BiTree);
PreOrderTraverse(BiTree);
}

------解决方案--------------------
=============================================================
cout < < "输入节点数据(char 型)(空格代表NULL): "; //这句要把数据
//全部输入后才会显示出来 不知道为什么?
============================================================

原因是:你用了既用了C语言的getchar(),又用了C++的cout,C与C++用混时,可能发生错误。

因此,建议将ch = getchar();改为:cin> > ch;
并将字符 '# '(其他字符也可以,只要该字符对cin来说是有效输入)作为叶子节点的标志符,也就是:将if(ch== ' ')改为if(ch== '# ')。这样就ok了。