树的基本理解

一.树的基本概念
   1.树型结构是非线性数据结构

   2.树(Tree)是N(N>=0)个结点的有限集。在任意一颗非空树中:
  • 有且只有一个特殊的结点称为根结点,根结点没有前驱。
  • 除根结点外,其余结点被分为M(M>0)个互不相交的集合T1,T2.......Tm,其中每一个集合T(i)(1<=i<=m)又是与树结构类似的 子树。每个树的根结点有且只有一个前驱,但是可以有0个或多个后继。

    3.树的结构定义是一个递归的定义

二.树的其他表示方法

三.树的基本术语

1.结点:节点包括一个数据元素及若干指向其子树的分支(指针(索引))
2.结点的度:结点所拥有子树的个数称为该结点的度

扫描二维码关注公众号,回复: 1066248 查看本文章
3.叶结点:度为0的结点称为叶结点,叶结点也称为终端结点
4.分支结点:度不为0的结点称为分支结点,分支结点也称为非终端结点。一颗树中除叶结点以外的结点都为分支结点。

5.祖先结点:从根结点到该结点所经分支上的所有结点。
6.子孙结点:以某结点为根结点的子树中所有结点

7.双亲结点:树中某结点有孩子结点,则这个结点称为他孩子结点的双亲结点,双亲结点也称为前驱结点。
8.孩子结点:树中一个根结点的子树的结点称为孩子结点,孩子结点也叫后继节点。

9.兄弟结点:具有相同双亲结点的结点称为兄弟结点。
10.树的度:树中所有节点的度的最大值称为该树的度

11.结点的层次:从根节点到树中某结点所经路径上的分支数称为该节点的层次,根结点的层次为1,其他节点的层次是其双亲结点的层次加1
12.树的深度:树中所有节点的层次最大值称为该树的深度。

13.有序树:树中节点的各颗子树T0,T1.....是有序的即为有序树。其中T1叫根的第一棵子树,以此类推。
14.无序数:树中节点的各棵子树之间的次序不重要,可以相互交换位置。

15.森林:树m棵树的集合(m>=0)。删去一棵非空树的根节点 ,就变为森林;反之增加一个节点,让森林中每一棵树的根结点都变为他的子女,森林就变为一棵树。
四.树的存储结构

计算机中存储树的信息,要求既要存储结点的数据信息,又要存储节点之间的逻辑关系信息。

1.双亲表示法:用指针表示每个节点的双亲结点

typedef int DataType;

struct Node
{
	struct Node* pParent;   //指向双亲结点的指针域  
	DataType data;          //结点中的数据

};

优点:寻找一个节点的双亲结点的操作很容易实现
缺点:寻找一个结点的孩子结点不容易


2.孩子表示法:用指针指出每个节点的孩子结点

typedef int DataType;

struct Node
{
	struct Node* pChild1; //指向孩子结点的指针域
	struct Node* pChild2;//指向孩子结点的指针域
	struct Node* pChild3;//指向孩子结点的指针域  
	DataType data;          //结点中的数据

};

优点:寻找一个节点的孩子结点比较方便
缺定:寻找一个结点的双亲比较难

3.双亲孩子表示法:用指针即表示每个节点的双亲结点,也表示每个节点的孩子结点。

typedef int DataType;

struct Node
{
	struct Node* pParent;   //指向双亲结点的指针域  
	struct Node* pChild1; //指向孩子结点的指针域
	struct Node* pChild2;//指向孩子结点的指针域
	struct Node* pChild3;//指向孩子结点的指针域  
	DataType data;          //结点中的数据

};

优点:找某结点的双亲和孩子都很方便

4.孩子兄弟表示法:表示每个节点的第一个孩子结点,也表示出每个节点的下一个兄弟结点。

typedef int DataType;

struct Node
{
	
	struct Node* pChild1; //指向孩子结点的指针域
	struct Node* pNextBrother; //指向下一个兄弟结点
	DataType data;          //结点中的数据

};

猜你喜欢

转载自blog.csdn.net/alidada_blog/article/details/80431195