首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-03-07 
请进来看看这个先序遍历二叉树的程序#includeiostream.h#includestdio.h#includemalloc.h#defineMAX

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

#define   MAXSIZE100

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了。

热点排行