目录
一、树(Tree)
- 是n (n≥0)个结点的有限集。
- n=0时称为空树。
- 线性结构是一对一,树是一对多的数据结构。
- n>0时根节点是唯一的,不可能存在多个根节点(不要和现实世界中大树混在一起)
- m>0时,子树的个数没有限制,但子树一定是互不相交的。如下图就不符合树的定义,因为子树相交
结点与度
-
叶子节点/终端节点:该结点下无子树,没有分支。度=0
-
非叶子节点/非终端节点:该结点下有子树。度≠0
- 结点的度:一个节点含有的子树的个数;
- 树的度:树中结点度的最大值
结点间关系
- 结点的子树的根称为该节点的孩子(Child),相应的,该节点称为孩子的双亲(Parent)。同一个双亲的孩子之间互称为兄弟。结点的祖先是从根到该节点所经分支上的所有节点。以某节点为根的子树中的任一结点都称为该结点的子孙。
树的其他相关概念
- 层次:根节点为第1层
- 树的深度/高度:树中结点的最大层数(下图中树的深度/高度为5)
- 森林:是m棵互不相交的树的集合
二、二叉树(Binary Tree)
是n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。简易理解为如果有分支,最多有2个。
二叉树的特点
- 每个结点最多只能有2个子树,也就是说二叉树的度必须 ≤ 2
- 二叉树的子树有左右之分,左右次序不能颠倒。即便只有一棵子树,也要区分它是左子树还是右子树。如下就是两颗树。
- 二叉树有5种形态:
- 空树(空二叉树)
- 只有一个根节点
- 根+左子树
- 根+右子树
- 根+左子树+右子树
特殊二叉树
- 斜树:所有节点都只有左子树的二叉树称为左斜树。所有节点都是只有右子树的二叉树称作右斜树。
- 平衡二叉树:左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1
- 满二叉树:在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。通俗的说,每一层节点均达到最大值,叶子结点在同一层。假设树的深度为k,结点个数为2^k-1。
-
满二叉树特点:
-
叶子只能在最下一层。
-
非叶子节点的度一定是2
-
在同样深度的二叉树中,满二叉树的结点个数最多,叶子最多。
-
- 完全二叉树:当前树除了最下面一层外,其余层均满,而最下面一层的结点均靠左。
-
完全二叉树特点:
-
叶子节点只能出现在最下两层
-
最下层的叶子节点一定集中在左部连续位置
-
倒数第二层,若有叶子结点,一定都在右部连续位置
-
如果节点度为1,则该节点只有左孩子,不存在只有右子树的情况
-
同样的节点数的二叉树,完全二叉树的深度最小。
-
二叉树的特点
性质1:
性质2:
性质3:
性质4:
性质5: