请问我用递归实现 前序次序建立一棵二叉树错误在哪里?
要求:
- 按前序次序建立一棵二叉树,以‘#’表示空。
- 中序、后序遍历该二叉树,输出遍历序列。
#include<iostream>
using namespace std;
struct BTNode
{
char data;
BTNode *leftchild;
BTNode *rightchild;
BTNode()
{
leftchild = rightchild = NULL;
}
BTNode(char a, BTNode *lc, BTNode *rc)
{
data = a;
rightchild = rc;
leftchild = lc;
}
};
class BT
{
public:
BTNode* root;
BT()
{
root = NULL;
}
void PreOrderInput(BTNode *p)
{
char b;
cin >> b;
if (b == '#')
{
p = NULL;
}
else
{
p = new BTNode;
p->data = b;
PreOrderInput(p->leftchild);
PreOrderInput(p->rightchild);
}
}
void InOrderPrint(BTNode *p)
{
if (p != NULL)
{
InOrderPrint(p->leftchild);
cout << p->data;
InOrderPrint(p->rightchild);
}
cout << endl;
}
void PostOrderPrint(BTNode *p)
{
if (p != NULL)
{
PostOrderPrint(p->leftchild);
PostOrderPrint(p->rightchild);
cout << p->data;
}
cout << endl;
}
};
int main()
{
BT BT1;
BT1.PreOrderInput(BT1.root);
BT1.InOrderPrint(BT1.root);
BT1.PostOrderPrint(BT1.root);
return 0;
}
结果不论输入是什么输出都为空
输出BT1.root 发现为空
请问错误在哪里
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
猜想是还没有理解函数的形参与实参。
(3)中的赋值,只能改p中的值,并不能改BT1.root的值,所以BT1.root还是空的。
参见http://c.biancheng.net/cpp/ht...
评论说是传的指针,不是传的值。指针,也是一种值。下面代码。ModifyValue就是用指针修改原值,但ModifyValue2,就只是修改指针的值,并未修改指针指向地址的值。