C++里面的构造函数能够递归调用么?刚开始学C++,望各位大虾指点~

Foreverlove_8 2009-12-25 09:17:54
我是想根据一颗二叉树的先根遍历次序和中根遍历次序将这个二叉树构造出来。若有错误,希望各位大虾指出并说明错误。小弟拜谢!
class TREE
{
int item;
TREE *left,*right;
public:
TREE();
//n为二叉树结点数,指针s1指向先根遍历的数组,s2指向中根遍历的数组。
TREE(int n,int *s1,int *s2);
}
构造函数如下:
TREE::TREE(int n,int *s1,int *s2)
{
item = *s1;
int i;
//寻找先根遍历的当前根在中根遍历中的位置,则中根遍历中该位置左边序列为当前根左子树的中根遍历,
//右边序列为当前根右子树的中根遍历
for( i = 0; *(s2+i) != *s1; i++ ) ;
left = &TREE(i-1,(s1+1),s2);
right = &TREE(n-i,(s1+i),(s2+i));
}

...全文
423 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Foreverlove_8 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cattycat 的回复:]
当然能实现,但是不推荐这样,构造函数做简单的初始化工作,像递归这种操作不建议这样做。
你还是用一个BuildTree函数实现相同的功能吧。
下面我写了个计算阶乘的递归构造函数。

C/C++ code
#include<iostream>usingnamespace std;class Fac
{public:
Fac(int n){if(n==1)
{
fact=1;return;
}else{
fact=Fac(n-1)*n;
}
};intoperator*(int x){return fact*x;
}int getFac(){return fact;
}private:int fact;
};void main()
{
Fac a(5);
cout<<a.getFac()<<endl;
}
[/Quote]真心感谢指点!
syj2008cn2003 2009-12-26
  • 打赏
  • 举报
回复
应该可以吧
cattycat 2009-12-25
  • 打赏
  • 举报
回复
当然能实现,但是不推荐这样,构造函数做简单的初始化工作,像递归这种操作不建议这样做。
你还是用一个BuildTree函数实现相同的功能吧。
下面我写了个计算阶乘的递归构造函数。


#include<iostream>
using namespace std;

class Fac
{
public:
Fac(int n){
if(n==1)
{
fact=1;
return;
}
else{
fact=Fac(n-1)*n;
}
};
int operator*(int x){
return fact*x;
}
int getFac(){
return fact;
}
private:
int fact;
};

void main()
{
Fac a(5);
cout<<a.getFac()<<endl;
}
Foreverlove_8 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
构造函数不是这么用的,你既然要递归,为什么不使用一个普通函数,偏要用构造?

[/Quote]把二叉树树定义为类,那怎么能够把这棵树建立起来啊?
arong1234 2009-12-25
  • 打赏
  • 举报
回复
构造函数不是这么用的,你既然要递归,为什么不使用一个普通函数,偏要用构造?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧