永发信息网

c++先序构建二叉树

答案:1  悬赏:60  手机版
解决时间 2021-03-07 21:19
#include
using namespace std;
struct node{
int data;
node *lchild;//左孩子节点
node *rchild;//右孩子节点
};
class tree{
private:
int k;
node *root;
node *current;
public:
tree(){ root=NULL;current=root;k=0;}
void creat_tree(node *t);
//void creat_tree(int x);
void display1() {Preorder(root); cout<void display2(){inorder(root); cout<void display3() {Postorder(root); cout<void pre_creattree(){creat_tree(current); cout<void Preorder(node *temp);//先序遍历
void inorder(node *temp);//中序遍历
void Postorder(node *temp);//后序遍历
};

void tree::creat_tree(node *t){//先序建立一棵二叉树,采用递归形式建立
int i=0;
cin>>i;
node **h;
if(i!=0){
node *t=new node;
t->data=i;
i=0;
if(k==0){h=&t;root=*h;}
k++;
creat_tree(t->lchild);
creat_tree(t->rchild);
}else{
t=NULL;
}
}
void tree::Preorder(node *temp){ //这是先序遍历二叉树,采用了递归的方法。
if(temp!=NULL){
cout<data< Preorder(temp->lchild);
Preorder(temp->rchild);
}
}
void tree::inorder(node *temp){ //这是中序遍历二叉树,采用了递归的方法。
if(temp!=NULL){
inorder(temp->lchild);
cout<data< inorder(temp->rchild);
}
}
void tree::Postorder(node *temp){ //这是后序遍历二叉树,采用了递归的方法。
if(temp!=NULL){
Postorder(temp->lchild);
Postorder(temp->rchild);
cout<data< }
}
void main(){
tree A;
cout<
A.pre_creattree();
cout< A.display1();
cout< A.display2();
cout< A.display3();

}
问题出在建树这一步。下面的遍历没有错的。请问建树要如何修改?
最佳答案



#include
using namespace std;
struct node{
int data;
node *lchild;
node *rchild;
};
class tree{
private:
int k;
node *root;
node *current;
public:
tree(){
root=NULL;
current=root;
k=0;
}
void creat_tree(node **t);//这是用指针的方法来实现的。所以修改了一下参数形式。
void display1() {Preorder(root); cout< void display2(){inorder(root); cout< void display3() {Postorder(root); cout< void pre_creattree(){creat_tree(&current); cout< void Preorder(node *temp);//先序遍历
void inorder(node *temp);//中序遍历
void Postorder(node *temp);//后序遍历
};
void tree::creat_tree(node **t){//先序建立一棵二叉树,采用递归形式建立
int i=0;
cin>>i;
if(i!=0){
node *h=new node;//新建节点
h->data=i;
*t=h;
if(k==0)//如果是根节点
root=*t;
k++;
creat_tree(&(*t)->lchild);//参数做了相应改变
creat_tree(&(*t)->rchild);//参数做了相应改变
}
else //i=0时为空节点
*t=NULL;
}
void tree::Preorder(node *temp){ //这是先序遍历二叉树,采用了递归的方法。
if(temp!=NULL){
cout<data< Preorder(temp->lchild);
Preorder(temp->rchild);
}
}
void tree::inorder(node *temp){ //这是中序遍历二叉树,采用了递归的方法。
if(temp!=NULL){
inorder(temp->lchild);
cout<data< inorder(temp->rchild);
}
}
void tree::Postorder(node *temp){ //这是后序遍历二叉树,采用了递归的方法。
if(temp!=NULL){
Postorder(temp->lchild);
Postorder(temp->rchild);
cout<data< }
}
void main(){
tree A;
cout< A.pre_creattree();
cout< A.display1();
cout< A.display2();
cout< A.display3();
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
梅花开放朔风高、时佰数九雪花飘。天剪鹅毛降
蓝丝羽家纺和晋帛家纺谁的知名度高,性价比高
恩源粮油商行我想知道这个在什么地方
有观鸟德的成语
北方的早春给农田盖薄膜,主要是通过改造当地
试问当直径ab与cd相交成多少度时,mn的长取得
别人欠我钱 我拿欠条找律师 请律师打官司 钱
MySQL存储引擎通常有哪3种?各自分别有什么特
下列生物现象中“不一定”的说法正确的是A人
汇丰游艺城这个地址在什么地方,我要处理点事
企鹅直播送跑车多少钱
一个应用程序中有多条并发执行的线索,每条线
“城为人居”,城市的最大贡献在于宜居、让人
哪一句好,要说明理由
香港金富鑫珠宝地址有知道的么?有点事想过去
推荐资讯
杨铭园地址在什么地方,想过去办事
南口赛鸽俱乐部怎么去啊,有知道地址的么
你是个白痴用英语怎么说
如何快速上手GoPro HERO4 Session-GoPro中国
永胜街地址有知道的么?有点事想过去
信用卡欠四千七,第三方追款,还了一千六,告
利润仅是指企业日常活动中收入减去费用后的净
有炎症的人能吃芋头吗?
以Is a Training Class or Tutor Necessary?
平果6蓝牙连不上金控钱包咋办
有辛正确的两个字怎么写
橡果园教育我想知道这个在什么地方
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?