回复 3楼 geninsf009
你写的很复杂····
我不是刚学·····不过还是谢谢!!!
代码:
/*完成树的顺序存储结构(双亲数组法)实现。完成如下功能:
(1)能进行初始化;即在算法中用双亲数组完成树的存储
(2)输入任一结点,求其在数组中的存储位置
(3)输入一结点,求其双亲
(4)输入一结点,求其孩子
(5)输入一结点,求其度(选作)*/
//定义树变量:psqtree t1;
//输入树中结点个数:cin>>t1.num;
//输入树中第i个结点的数据元素的值:
//cin>>t1.nodes[i].data
//输入第i个元素的双亲的下标
#include"iostream.h"
typedef char elemtype;
#define maxsize 10
typedef struct
{
elemtype data;//数据元素的值
int parent;//双亲结点下标位置
}pnode;//一个数据结点的类型
typedef struct
{
pnode nodes[maxsize];//结构体数组,每一个元素有两个成员,data,parent
int num;//树中结点的个数
}psqtree;//树的顺序存储结构类型
void createtree(psqtree &t1)
{
cout<<"输入结点的个数:";//输入结点个数,初始化num
cin>>t1.num;
for(int i=1;i<=t1.num;i++)
{
cin>>t1.nodes[i].data;
cin>>t1.nodes[i].parent;
}
}
int arraylocation(psqtree &t1,elemtype e)//输入任一结点e,求其在数组中的存储位置i
{
int i=1;
while(t1.nodes[i].data!=e)
{
i++;
}
return i;
}
void getparent(psqtree &t1,elemtype e)//输入一结点,求其双亲
{
int i=1;
while(t1.nodes[i].data!=e)
{
i++;
}
cout<<t1.nodes[t1.nodes[i].parent].data;
}
void getsons(psqtree &t1,elemtype e)//输入一结点,求其孩子
{
int i=1;
while(t1.nodes[i].data!=e)
{
i++;
}
for(int j=1;j<=t1.num;j++)
{
if(t1.nodes[j].parent==i)
cout<<t1.nodes[j].data;
}
}
void getdu(psqtree &t1)
{
int max=0;//结点子树的个数
int i=-1;//结点的下标
while(i<t1.num)
{ int num=0;
for(int j=1;j<=t1.num;j++)
{
if(t1.nodes[j].parent==i)
num++;
}
if(max<num)
max=num;
i++;
}
cout<<max;
}
void dislist(psqtree &t1)
{
for(int i=1;i<=t1.num;i++)
{
cout<<t1.nodes[i].data;
// cout<<t1.nodes[i].parent;
}
}
void main()
{
psqtree t1;
createtree(t1);
dislist(t1);
elemtype e;
cout<<endl;
cout<<"输入结点为e的元素:";
cin>>e;
cout<<"数据的位置:"<<arraylocation(t1,e);
cout<<endl;
cout<<"输入结点为e的(求双亲):";
cin>>e;
getparent(t1,e);
cout<<endl;
cout<<"输入结点为e的(求孩子):";
cin>>e;
getsons(t1,e);
cout<<endl;
cout<<"树的度为:";
getdu(t1);
}