大神帮忙看看这段代码哪里错了

小苏打188 2014-01-02 03:23:31
输入二叉树的先序遍历结果,根据该结果创建二叉树链表;
例如 A 0 B C 0 0 D 0 0
其中0表示节点为空,则B为A的左孩子,CD为B的左右孩子;

这是我的代码:

struct biTreeNode
{
char node;
biTreeNode * left;
biTreeNode * right;
};

class biTreeTravel
{
public:
biTreeTravel(){T=new biTreeNode;pos=1;}
void create(int); //输入先序遍历结果
void createList(biTreeNode * );//创建二叉树链表
void inOrder(); //中序遍历,测试用

char OrderNode[100];保存先序遍历的结果
biTreeNode * T;
int pos; 先序遍历结点下标
};

void biTreeTravel::createList(biTreeNode * S)
{
if(OrderNode[pos]!='0') 判断是否为空
{
S->node=OrderNode[pos];
pos=pos+1;
createList(S->left);
pos=pos+1;
createList(S->right);
}

}

void biTreeTravel::create(int n)
{
for(int i=1;i<=n;i++)
cin>>OrderNode[i];
}

int main()
{
int sampleNo;

biTreeTravel myTree;

cin>>sampleNo;

myTree.create(sampleNo);
myTree.createList(myTree.T);



return 0;
}
调试时报错退出,不知道错在哪里?
...全文
128 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pump天天学习 2014-01-02
  • 打赏
  • 举报
回复
引用 2 楼 u012293946 的回复:
[quote=引用 1 楼 ri_aje 的回复:] createList 改成这样试试,createList(biTreeNode*&)。 原来 createList(S->left); createList(S->right); 这样的写法 S->left/right 得不到新值。
还是不行[/quote] 你只在class biTreeTravel的构造函数里new了一个节点出来 这样的话当createList递归进入到第二层的时候,没有为S指向的位置分配合理的内存 另外,#1说的没有问题,原来的写法得不到新值,只是一个副本
小苏打188 2014-01-02
  • 打赏
  • 举报
回复
引用 1 楼 ri_aje 的回复:
createList 改成这样试试,createList(biTreeNode*&)。 原来 createList(S->left); createList(S->right); 这样的写法 S->left/right 得不到新值。
还是不行
ri_aje 2014-01-02
  • 打赏
  • 举报
回复
createList 改成这样试试,createList(biTreeNode*&)。 原来 createList(S->left); createList(S->right); 这样的写法 S->left/right 得不到新值。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧