请进来看看这个先序遍历二叉树的程序解决方案
请进来看看这个先序遍历二叉树的程序
#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了。
#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了。