二叉树实验
确定一个二叉树,利用顺序结构存储,实现树的构造;并层序输出点数据;输出各个结点双亲和孩子信息;输出所有叶子信息。
#include<iostream>
using namespace std;
#include<string.h>
const int M=100;
class tree
{public:
tree(){length=0;}
void create(); //建立二叉树
void print(); //输出结点信息
void leave();//输出叶子结点
void all();//层序输出结点
private:
char a[M];
int length;
};
void tree::create()
{
char n;
int i=1;
cout<<"请输入二叉树结点,‘#’为空结点,'0'代表结束!"<<endl;
cout<<"输入数据:";
while(1)
{
cin>>n;
if(n=='0') { break;}
else a[i++]=n;length++;
} }
void tree::all()
{
if(a[1]!='0')
{ cout<<"层序输出为:";
for(int i=1;i<=length;i++)
{cout<<" "<<a[i]; }
cout<<endl;
}
else cout<<"该树为空!";
}
void tree::print()
{ int i;
cout<<"各结点信息:"<<endl;
for(i=1;i<=length;i++)
{
cout<<"第 "<<i<<"个结点信息:"<<a[i]<<endl;
cout<<"该结点的双亲结点信息:"<<a[i/2]<<endl;
if(a[2*i]=='#'||(2*i)>length)
{cout<<"该结点无左孩子!"<<endl;}
else cout<<"该结点的左孩子结点信息:"<<a[2*i]<<endl;
if(a[2*i+1]=='#'||(2*i+1)>length)
cout<<"该结点无右孩子!"<<endl;
else cout<<"该结点的右孩子结点信息:"<<a[2*i+1]<<endl;
}
}
void tree::leave()
{if(a[1]!='0')
{
cout<<"叶子结点为:";
for(int i=1;i<=length;i++)
{
if((a[2*i]=='#'&&a[2*i+1]=='#')||((2*i+1)>length&&(2*i)>length)&&a[i]!='#')
cout<<a[i]<<" ";
}
cout<<endl;
}
else cout<<"该树为空!";
}
int main()
{tree obj;
obj.create();
obj.print();
obj.leave();
obj.all();
return 0;}