读书人

建立二叉树时出错请帮忙修改解决思路

发布时间: 2012-04-06 12:22:24 作者: rapoo

建立二叉树时出错,请帮忙修改

C/C++ code
#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;}


[解决办法]
C/C++ code
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);
}
}

这里用的是中序存储,提前是根节点要提前建立.

读书人网 >C++

热点推荐