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

小苏打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;
}
调试时报错退出,不知道错在哪里?
...全文
90 点赞 收藏 3
写回复
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 得不到新值。
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告