#include<iostream>
//树结点
typedef struct{
char data;//数据域
int father;//双亲结点位置
}TreeNode;
//树链表
class Tree{
public:
TreeNode element[20];
int number;
int CreateFatherTree();
void PrintFatherTree();
void PrintTreeNode(int position);
void GetTreeRoot();
};
//使用双亲链表表示法创建一个树
int Tree::CreateFatherTree()
{
Tree::number=10;
TreeNode node;
//A 根结点
node.data='A';
node.father=-1;
Tree::element[0]=node;
//B
node.data='B';
node.father=0;
Tree::element[1]=node;
//C
node.data='C';
node.father=0;
Tree::element[2]=node;
//D
node.data='D';
node.father=0;
Tree::element[3]=node;
//E
node.data='E';
node.father=1;
Tree::element[4]=node;
//F
node.data='F';
node.father=1;
Tree::element[5]=node;
//H
node.data='H';
node.father=3;
Tree::element[6]=node;
//I
node.data='I';
node.father=3;
Tree::element[7]=node;
//G
node.data='G';
node.father=6;
Tree::element[8]=node;
//K
node.data='K';
node.father=7;
Tree::element[9]=node;
}
//打印树
void Tree::PrintFatherTree()
{
for(int i=0;i<Tree::number;i++)
{
std::cout<<Tree::element[i].data<<"\t"<<Tree::element[i].father<<"\n";
}
}
//输出一个结点的信息
void Tree::PrintTreeNode(int position)
{
std::cout<<"位置号为:"<<position<<"\t数据域为:"<<Tree::element[position].data<<"\t双亲结点为:"<<Tree::element[position].father<<std::endl;
}
//求树的根结点
void Tree::GetTreeRoot()
{
for(int i=0;i<Tree::number;i++)
{
if(Tree::element[i].father==-1)
{
std::cout<<"树的根节点为:";
PrintTreeNode(i);
}
break;
}
}
int main()
{
Tree tree;
tree.CreateFatherTree();
tree.PrintFatherTree();
tree.GetTreeRoot();
return 0;
}