建立二叉树时出错,请帮忙修改
#include "stdafx.h"#include <iostream>//using namespace std;struct BT{ char data; struct BT* lChild; struct BT* rChild;};typedef struct BT BT;void CreateBT(BT* bt){ char cRecv; cin>>cRecv; if (cRecv == '#') { bt = NULL; } else { BT* pNew = new BT; pNew->data = cRecv; CreateBT(pNew->lChild); CreateBT(pNew->rChild); }}int _tmain(int argc, _TCHAR* argv[]){ BT* pRoot = new BT; CreateBT(pRoot); system("pause"); return 0;}void CreateBT(BT* &bt) // 想要改变它应该给个引用{ char cRecv; cin>>cRecv; if (cRecv == '#') { bt = NULL; } else { BT* pNew = new BT; pNew->data = cRecv; bt=pNew; // 不能不保存 CreateBT(pNew->lChild); CreateBT(pNew->rChild); }}
[解决办法]
我觉得应该先将根节点new出来
[解决办法]
三楼正确,要先要根点创建出来,然后再递归调用:
void CreateBT(BT* bt)
{
char cRecv;
cout<<"请输入左值:";
cin>>cRecv;
if (cRecv != '#')
{
bt->lChild=new BT();
bt->lChild->data=cRecv;
CreateBT(bt->lChild);
}
cout<<"请输入右值:";
cin>>cRecv;
if (cRecv != '#')
{
bt->rChild=new BT();
bt->rChild->data=cRecv;
CreateBT(bt->rChild);
}
}
这里用的是中序存储,提前是根节点要提前建立.