回 帖 发 新 帖 刷新版面

主题:[讨论]关于二叉树的遍历

#include <iostream> 

using namespace std; 
struct binode //定义结点类型 

int data; 
binode *lchild; 
binode *rchild; 
}; 
typedef binode *link; //结点类型指针用link代替 
link point_node[101]; 
bool visited[101]; 
class bitree 

public: 
bitree(); //构造函数 
bool empty() const; //判断是否为空 
int number() const; //求二叉树的结点数 
int high(link &tree_root) const; //求二叉树的高度 
void cre_fr_arr(int count); 
void preorder(int rootnum) const; //先序遍历 
void inorder(int rootnum) const; //中序遍历 
void postorder(int rootnum) const; //后序遍历 
int searchRoot(); 

private: 
int count; //记录二叉树中的结点数 
}; 
bitree::bitree() 

count=0; 
for(int i=0;i<101;i++) 

point_node[i]=new binode; 
point_node[i]->data=0; 
point_node[i]->rchild=NULL; 
point_node[i]->lchild=NULL; 
visited[i]=false; 



int bitree::searchRoot() 

int i=0; 
for(i=0;i<count;i++) 
if(visited[i]==false) 
break; 
return i+1; 

bool bitree::empty() const 

return count==0; 

int bitree::number()const 

return count; 

int bitree::high(link &tree_root)const 

if(tree_root==NULL) 
return 0; 
return (max(high(tree_root->lchild),high(tree_root->rchild))+1); 


void bitree::cre_fr_arr(int countall) 

static int j=0; 
int a,b,c; 
while(j<countall) 

cin>>a>>b>>c; 
count++; 
point_node[a-1]->data=a; 
if(b!=0) 

point_node[a-1]->lchild=point_node[b-1]; 
visited[b-1]=true; 

if(c!=0) 

point_node[a-1]->rchild=point_node[c-1]; 
visited[c-1]=true; 

j++; 


void bitree::preorder(int rootnum) const 

if(rootnum!=0) 

cout<<point_node[rootnum-1]->data<<' '; 
if(point_node[rootnum-1]->lchild!=NULL) 
{preorder(point_node[rootnum-1]->lchild->data);} 
if(point_node[rootnum-1]->rchild!=NULL) 
{preorder(point_node[rootnum-1]->rchild->data);} 


void bitree::inorder(int rootnum) const 

if(rootnum!=0) 

if(point_node[rootnum-1]->lchild!=NULL) 
{inorder(point_node[rootnum-1]->lchild->data);} 
cout<<point_node[rootnum-1]->data<<' '; 
if(point_node[rootnum-1]->rchild!=NULL) 
{inorder(point_node[rootnum-1]->rchild->data);} 


void bitree::postorder(int rootnum) const 

if(rootnum!=0) 

if(point_node[rootnum-1]->lchild!=NULL) 
{postorder(point_node[rootnum-1]->lchild->data);} 
if(point_node[rootnum-1]->rchild!=NULL) 
{postorder(point_node[rootnum-1]->rchild->data);} 
cout<<point_node[rootnum-1]->data<<' '; 



int main() 

bitree bitree1=bitree(); 
int times; 
int rootnum; 
cin>>times; 
bitree1.cre_fr_arr(times); 
rootnum=bitree1.searchRoot(); 
 cout<<"finish"<<endl; 
cout<<rootnum<<endl; 
 cout<<"先序遍历结果:"<<endl; 
bitree1.preorder(rootnum); 
cout<<endl; 
cout<<"中序遍历结果:"<<endl; 
bitree1.inorder(rootnum); 
cout<<endl; 
cout<<"后序遍历结果:"<<endl; 
bitree1.postorder(rootnum); 
cout<<endl; 
return 0; 



代码中bitree1.cre_fr_arr(times); 不太懂!
还有要想输入字符要怎么样修改啊!
大家仔细看  呵呵 谢谢大家的帮助哦
!学习数据结构好难哦!

回复列表 (共1个回复)

沙发

回答出来了吗?怎么样的啊?

我来回复

您尚未登录,请登录后再回复。点此登录或注册