树的存储结构:双亲表示法

 

#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;
}

猜你喜欢

转载自blog.csdn.net/weixin_42617472/article/details/84260621