为了账号安全,请及时绑定邮箱和手机立即绑定

程序没错 ,输出不出来结果,调试了好长时间 。。。。。 谢谢

程序没错 ,输出不出来结果,调试了好长时间 。。。。。 谢谢

C++
慕田峪7551596 2017-11-16 14:35:27
#include<iostream>using namespace std;struct BTnode{ int data; BTnode *Lchild,*Rchild;};class Tree{private: BTnode *m_root;public: Tree(); ~Tree(); void creat(int *ch,const int c); void _creat(BTnode *T,int &i,int *ch,const int c); void _InorderTraverse(BTnode *T); void InorderTraverse();};Tree::~Tree(){}Tree::Tree(){   m_root=NULL;}//中序遍历void Tree::InorderTraverse(){ _InorderTraverse(m_root);}void Tree::_InorderTraverse(BTnode *T){ if(T) {  _InorderTraverse(T->Lchild);  cout<<T->data;  _InorderTraverse(T->Rchild); }}//先序void Tree::creat(int *ch,const int c){ int i=0; _creat(m_root,i,ch,c); }void Tree::_creat(BTnode *T,int &i,int *ch,const int c){  if(ch[i]!=c) {  T=new BTnode;  T->data=ch[i];  _creat(T->Lchild,++i,ch,c);  _creat(T->Rchild,++i,ch,c); }}void main(){ int a[]={1,5,3,0,0,4,0,0,6,7,0,0,2,0,0}; const int c=0; Tree t; t.creat(a,c); t.InorderTraverse(); //system("pause");}
查看完整描述

1 回答

?
慕移动6052691

TA贡献22条经验 获得超7个赞

1、如果想改变指针所指向的内容,采用单重指针就行了,就是普通的真正

2、如果想改变指针所指向的地址,则需要采用双重指针 BTnode** T,_creat(m_root,i,ch,c);如果想改变m_root的指向,所以要使用双重指针,传入&m_roor;

修改后代码:遍历出的内容是否正确我没有做检查

#include<iostream>

using namespace std;

struct BTnode

{

int data;

BTnode *Lchild,*Rchild;

};

class Tree

{

private:

BTnode *m_root;

public:

Tree();

~Tree();

void creat(int *ch,const int c);

void _creat(BTnode** T,int &i,int *ch,const int c);

void _InorderTraverse(BTnode *T);

void InorderTraverse();

};

Tree::~Tree()

{

}

Tree::Tree()

{

m_root=NULL;

}

//中序遍历

void Tree::InorderTraverse()

{

_InorderTraverse(m_root);

}

void Tree::_InorderTraverse(BTnode *T)

{

if(T)

{

_InorderTraverse(T->Lchild);

cout<<T->data;

_InorderTraverse(T->Rchild);

}

}

//先序

void Tree::creat(int *ch,const int c)

{

int i=0;

_creat(&m_root,i,ch,c);


}

void Tree::_creat(BTnode** T,int &i,int *ch,const int c)

{


if(ch[i]!=c)

{

(*T)=new BTnode();

(*T)->data=ch[i];

_creat(&((*T)->Lchild),++i,ch,c);

_creat(&((*T)->Rchild),++i,ch,c);

}


}



void main()

{

int a[]={1,5,3,0,0,4,0,0,6,7,0,0,2,0,0};

const int c=0;

Tree t;

t.creat(a,c);

t.InorderTraverse();

system("pause");

}


查看完整回答
反对 回复 2017-11-16
  • 1 回答
  • 0 关注
  • 1209 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信