【数据结构】【二叉树】一、树(不特指二叉树)的表示方式

一、双亲表示法

结构:

  1. 存储节点数据
  2. 存储双亲位置
typedef int ElemType;
typedef 100 MAX_TREE_SIZE;

struct PTNode /*节点结构*/
{
    
    
	ElemType data;
	int parent;
}

struct PTree /*树结构*/
{
    
    
	PTNode nodes[MAX_TREE_SIZE];
	int r, n;/*根的位置和节点数*/
}

在树的双亲表示法中,PTree结构包含了一个PTNode数组,在这个PTNode数组中,就包含了这棵树的所有节点信息,即如下图所示:
如上图所示,PTree数组的每个元素都是PTNode类型,也就是树的一个节点,而每个节点包含两个信息,即 dataparent,上图中第一个PTNode的parent是第4个PTNode,如此表示。

二、孩子表示法

与双亲表示法类似,用一个数组存储所有节点,但每个节点都指向一个链表,链表中的每个元素都是这个节点的孩子。
在这里插入图片描述
在这种表示方法下,每个节点都出现了两次,比如节点4,如果它是节点0的第一个孩子,那么它就既出现在数组的第4的位置,又出现在节点0指向的链表的第一个位置。

结构体表示如下:

struct ChildPtr //用来构成链表的元素
{
    
    
	int child_where;/*孩子所在的位置*/
	ChildPtr *next;
}

struct CTBos //用来构成数组中的元素
{
    
    
	ElemType data;
	ChildPtr *FirstChild; //指向表示它孩子的链表的头指针
}

struct CTree
{
    
    
	CTBox nodes[MAX_TREE_SIZE]; //数组,存储了每个节点
	int r, n; /*根的位置和结点数*/
}

三、孩子兄弟表示法

一个节点,既包含这个节点的数据,又包含它的第一个孩子,又包含它右侧紧邻的兄弟。如下图所示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39642978/article/details/111186533