首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2014-01-03 
大神帮忙看看这段代码哪里错了输入二叉树的先序遍历结果,根据该结果创建二叉树链表例如 A 0 B C 0 0 D 0

大神帮忙看看这段代码哪里错了
输入二叉树的先序遍历结果,根据该结果创建二叉树链表;
例如 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;
}
调试时报错退出,不知道错在哪里?
[解决办法]
createList 改成这样试试,createList(biTreeNode*&)。
原来
createList(S->left);
createList(S->right);
这样的写法 S->left/right 得不到新值。
[解决办法]

引用:
Quote: 引用:

createList 改成这样试试,createList(biTreeNode*&)。
原来
createList(S->left);
createList(S->right);
这样的写法 S->left/right 得不到新值。

还是不行

你只在class biTreeTravel的构造函数里new了一个节点出来
这样的话当createList递归进入到第二层的时候,没有为S指向的位置分配合理的内存
另外,#1说的没有问题,原来的写法得不到新值,只是一个副本

热点排行