我使用下面的程序进行先序建立二叉树和先序中序后序遍历,但是发现总是有问题,求帮助!!!!!

#include<iostream>usingnamespacestd;classTreeNode{public:chardata;TreeNode*L,*R;TreeN... #include <iostream>
using namespace std;
class TreeNode
{
public:
char data;
TreeNode *L,*R;
TreeNode()
{
L = NULL;
R = NULL;
}
};
class Tree
{
public:
TreeNode *root;
Tree() {root = NULL;}
int Creat();
int Creat(TreeNode *p);
void PreOrder()
{
PreOrder(root);
}
void PreOrder(TreeNode *p);
void InOrder()
{
InOrder(root);
}
void InOrder(TreeNode *p);
void PastOrder()
{
PastOrder(root);
}
void PastOrder(TreeNode *p);
};
int Tree::Creat()
{
char ch;
scanf("%c",&ch);
if(ch == '#') root=NULL;
else
{
root = new TreeNode;
root->data = ch;
Creat(root->L);
Creat(root->R);
}
return 1;
}
int Tree::Creat(TreeNode *p)
{
char ch;
scanf("%c",&ch);
if(ch == '#')
{
p=NULL;
return 1;
}
p = new TreeNode;
p->data = ch;
Creat(p->L);
Creat(p->R);
return 1;
}
void Tree::PreOrder(TreeNode *p)
{
if(p != NULL)
{
cout << p->data << " ";
PreOrder(p->L);
PreOrder(p->R);
}
}
void Tree::InOrder(TreeNode *p)
{
if(p != NULL)
{
InOrder(p->L);
cout << p->data << " ";
InOrder(p->R);
}
}
void Tree::PastOrder(TreeNode *p)
{
if(p != NULL)
{
PastOrder(p->L);
PastOrder(p->R);
cout << p->data << " ";
}
}
int main()
{
Tree T;
T.Creat();
T.PreOrder();
T.InOrder();
T.PastOrder();
return 0;
}
这是测试用例
-+a##*b##c##/d##e##
求解答问什么无法建立一个树
展开
 我来答
chiconysun
2013-03-30 · TA获得超过2.2万个赞
知道大有可为答主
回答量:5410
采纳率:92%
帮助的人:2570万
展开全部
将class Tree 中的函数原型int Creat(TreeNode *p);
改为int Creat(TreeNode *&p);
后面该函数实现同样修改就可以了

原因是这个函数是传值的,只能将指针单向传递进去,外面的指针实参没有改,改成引用就可以了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式