数据结构——树

发布时间 2023-05-28 23:40:40作者: CD、小月

@

概念

树:非顺序(线形)数据结构;基于结点的数据结构,但树里面的每个结点,可以含有多个链分别指向其他多个结点。

相关术语

根节点:位于树顶部的节点叫做根节点,没有父节点。

内部节点和外部节点(支节点和叶子节点):
​ 树中每个元素都叫做节点,节点分为内部节点和外部节点。
​ 至少有一个子节点的节点被称为内部节点(支节点)。
​ 没有子节点的节点被称为外部节点或叶节点。

节点的祖先和后代
​ 除了根节点外,每个节点有且仅有一个父结点。
​ 一个节点(除了根节点)的祖先包括父节点、祖父节点、曾祖父节点等。
​ 一个节点的后代包括子节点、孙子节点、曾孙节点等。

子树:子树由节点和它的后代构成。

节点的度:一个节点含有的子结点的个数

树的度:树内所有节点的度的最大值

节点的深度:节点的深度取决于它的祖先元素的节点数量。

树的深度(高度):取决于所有节点深度的最大值。

特点

  • 树的根结点没有前驱结点,其它结点有且只有一个前驱结点;
  • 每个结点可以有0个或多个后继结点;
  • 子树互不相交;
  • 一颗有n个结点的树有n-1条边(因为根结点没有向上的边)。

树的性质

​ 树中的结点数等于所有结点的度数加1(度数对应树的边数,n个结点的树有n-1条边(根节点没有向上的边));

​ 度为m的树中第i层最多有$m^{i-1}$个结点(i >= 1)(度为m的树中第i层结点最多的数量等于满m叉树第i层的结点数量);

​ 高度为h的m叉树至多有$\frac{m^{h}-1}{m - 1}$个结点(最多情况对应满二叉树,计算方法为等比数列求和);

​ 具有n个结点的m叉树的最小高度计算时考虑对应的完全m叉树(或者满m叉树)的情况(即设高度为h,则$\frac{m^{h}-1}{m - 1}= n$,计算出的h向下取整 )。

二叉树

概念

​ 每个结点最多有两颗子树(即二叉树中结点的最大度为2),且二叉树是有序树。

几个特殊的二叉树

​ 满二叉树(Full Binary Tree)(完美二叉树(Perfect Binary Tree):指深度为k且有2k-1个结点的二叉树,即所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上。

​ 完全二叉树(Complete Binary Tree):一颗深度为k的二叉树,k层的结点都是连续靠左并不可隔开的,并且1~k-1层的结点也组成了一棵满二叉树。

​ 二叉排序树(Binary Search Tree ):左侧节点存储(比父节点)小的值,在右侧节点存储(比父节点)大的值。

​ 平衡二叉树(Balance Tree):任意节点的子树的高度差都小于等于1。

二叉树的性质

​ 对一棵二叉树,如果叶子节点的个数为$n_{0}$,度为2的节点个数为$n_{2}$,则$n_{0}$=$n_{2}$+1(根据之前树的性质,有树的结点数等于所有结点的度数加1,得到$n_{0}$ + $n_{1}$ + $n_{2}$ = $n_{1} + n_{2}* 2+ 1$ ,从而得到该等式);

​ 非空二叉树第k层上:最多有 $2^{k-1}$ 个结点;

​ 高度为h的二叉树上:最多有 $2^h-1$ 个结点(对应满二叉树);

​ 对于完全二叉树,结点编号为i的结点的双亲结点编号为[i / 2],若有左孩子,则左孩子编号为2 * i,若有右孩子,则右孩子编号为2 * i + 1;

​ 具有n个节点的完全二叉树的深度为${log_{2}}^{n}+1$