C Language 树 - Tree和BinaryTree

Posted Adorable_Rocy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C Language 树 - Tree和BinaryTree相关的知识,希望对你有一定的参考价值。

前言:数据结构中的树和二叉树是占着特别大的比重的,树和二叉树不是小编之前介绍的线性结构了,树形结构属于非线性结构,常用的树形就是树和二叉树,线性结构可以表示元素或者多个元素一对一的情况,但是树形结构中,一个节点可以与多个结点相对应,因此是可以表示层次结构的数据

  • 如下图是一个简单的三次树


概念篇~

补充~ 树的表示形式有如下四种:

  • 树形表示法

  • 文氏图表示法

  • 凹入表示法

  • 括号表示法

A(B(D,E,F),C(G,H))


  1. 树是 N (N >= 0 )个结点的有限集合,N = 0 时,称为空树,这是一种特殊情况。在任意一棵非空树中
    应满足:

      1) 有且仅有一个特定的称为根的结点。
    
      2)当 N > 1 时,其余结点可分为 m ( m > 0)个互不相交的有限集合T1 , T2 , T3 , .... Tm ,其中每一个
    
         集合本身又是一棵树,并且称为根结点的子树。
    
  2. 树的定义是一种递归的数据结构。树作为一种逻辑结构,同时也是表示一种分层结构,树的特点如下:

      1)树的根结点没有前驱结点,除根结点之外的所有结点有且只有一个前驱结点。
    
      2)树中所有结点可以有零个或多个后继结点。
    

3.树的专业术语:

  1. 结点的度与树的度。树中某个结点的子树的个数称为结点的度。树中所有结点的度的最大值称为树的度。通常将度为m的树称为m次树。如上图所示,最大度为3,所以是一颗三次树

  2. 分支结点 与叶子节点。树中度不为零的节点称为非终端结点,我们称之为分支结点。度为零的结点称之为叶子结点。度为1的结点称为单分支结点。度为2的结点称为双分支结点。


3. 路径与路径长度。可以简单的理解为从A到任意一个结点的路径长度等于通过的结点数减一。如上图A到I的路径为(A,B,D,I),其长度为3。

4.孩子节点、双亲结点和兄弟结点。如图所示,BC互为兄弟结点,在同一个路径下,每个后继节点称为该结点的孩子结点。例如D是B的孩子结点。相反的是,B是D的双亲结点,于是在同一路径下,可以把每个结点经过的每个结点(不包括自身节点),称为该结点的子孙结点。可以从A结点到N结点之前的所有经过的结点(不包括N结点本身),称为该结点的祖先节点。

5.结点层次和树的高度。结点层次或者结点深度都是从树根开始定义的,树根结点为第一层,他的孩子结点为第二层,以此类推,一个结点所在的层次为其双亲结点的层次加一。树中结点的最大层次称为树的高度或者树的深度

6.有序树和无序树。树中各结点的子树是按照一定的次序从左向右安排的,且相对次序是不能全部随意变换的,则称为有序树,否则称为无序树,一般情况下。默认指向有序树。

7.森林(forest):n(n>0)个互不相交的树的集合称为森林。反之,给m(m>1)棵树添加一个共同的双亲元素,则合并了树森林,森林就转换成了树。

二、树的存储结构

  • 双亲表示法
  • 孩子表示法
  • 孩子兄弟表示法

(1)、双亲表示法(parent storage stuceture)

结构定义为:

typedef struct{
	ElemType data; //元素类型
	int parent; //parent定位
};


补充:十分便捷的定位到双亲的位置,能够快速的找到双亲

(2)、孩子表示法(child chain storage structure)

typedef struct node{
	ElemType data;
	struct node *son[MaxSons];
};


(3)、孩子兄弟表示法(child borther chain storage structure)

typedef struct tnode{
	ElemType data;
	struct tnode *vp; //指向孩子 
	struct tnode *hp; //指向兄弟 
};


其实孩子兄弟表示法是不是和二叉树结构很相似呢?进行旋转45度就可以得到二叉树。

以上是关于C Language 树 - Tree和BinaryTree的主要内容,如果未能解决你的问题,请参考以下文章

数据结构---树

C Language 二叉树 - 二叉树的遍历(十四)

leetcode算法:Trim a Binar Search Tree

Lowest Common Ancestor of a Binary Tree(二叉树公共祖先)

leetcode -day23 Construct Binary Tree from Inorder and Postorder Traversal & Construct Binar

LeetCode 236.lowest-common-ancestor-of-a-binary-tree