永发信息网

一道c++编程题

答案:3  悬赏:70  手机版
解决时间 2021-07-17 09:37

#include<iostream>
using namespace std;
struct BiTree
{
int data;
BiTree *lchild,*rchild;
};

BiTree *CreatBiTree(BiTree *T)
{
int i;
cin>>i;
T=new BiTree;
if(i==0)
T=NULL;
else
{
T->data=i;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
return T;
}
void LDR( BiTree *T)
{
if(T==NULL)
return;
cout<<T->data<<endl;
LDR(T->lchild);
LDR(T->rchild);
}
void main()
{
BiTree *root;
LDR(CreatBiTree(root));
}

哪里出问题了!!

帮帮忙谢谢....

最佳答案

BiTree *CreatBiTree(BiTree *T)


问题出在这个函数里边


本函数在堆中分配了一块内存并让T(root)指向它(即修改了T的值),但root在函数返回后值又变回初始值。


可以改成这样:BiTree *CreatBiTree(BiTree* &T) 用引用的形式,返回后root的值不会改变。



PS: 1. 函数中T=new BiTree; 应写在else的里边

全部回答

你创建子节点的时候,不需要传入什么参数,你想一下吧 BiTree *CreatBiTree() { BiTree *T; int i; cin>>i; if(i==0) T=NULL; else { T=new BiTree;//为了避免内存泄漏 T->data=i; T->lchild=CreatBiTree(); T->rchild=CreatBiTree();//把子节点的地址返回就可以 } return T; }

/////////////////////

int main() { BiTree *root; LDR(root=CreatBiTree());

} ¥1001 的回答可能更接近这个程序的本意

结构体没有用typedef定义
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
婴儿能喝刚挤的牛奶不
我的女朋友“啪”一巴掌打在我脸上。我当时朦
家园里的牧场在哪里找得到啊
2009年年末会烂冬吗?
cd key激活码要怎么领取?
在那可以赚Q币
《虎友谜苑》 俭以养廉(探骊格)
索尼爱立信雅锐U100i这部手机最新报价多少?
深圳市合科电子设计有限公司是做汽车音响方案
终极三国中,刘备为阿香创作的那首歌叫什么名
我的电脑网页为何在问问里面不能回答问题!
从浙江杭州开车到东北沈阳过桥费和油钱一共要
女人怎么高潮,
有没什么牌子的洗面奶控油和去角质的效果好的
怎么做吧主
推荐资讯
我想关于木雕类的书有什么
海淀知春路附近有什么小区,每个小区有多少栋
如果有人用QQ发送木马接受了?该怎么处理/
文艺复兴时期的艺术设计与中世纪艺术设计的异
《守护甜心》还有的看吗?
老出手汉咋回事
2009-2010赛季休斯敦火箭队中哪名队员虽然是
哪里可以找到前三手的点卡货源?
显卡为什么会突然减速
与快乐天使所搭配的情侣网名是什么?
“万”五笔怎么打?
如果宠物狗病了,能把它埋了吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?