树
树的基本概念
树是n(n≥0)个结点的有限集合,n = 0时,称为空树。对任意一棵非空树,因满足:
- 有且仅有一个根节点
- 没有后继的结点成为“叶子结点”
- 有后继的结点称为“分支结点”
- 除了根节点外,任何一个结点都有且仅有一个前驱。
- 每个结点可以有0个或多个后继
- 当n > 1时,其余结点可分为m(m > 0)个互不相交的有限集合T1, T2,…, Tm,其中每个集
合本身又是一棵树,并且称为根结点的子树
属性:
- 结点的层次(深度)——从上往下数
- 结点的高度——从下往上数
- 树的高度(深度)——总共多少层
- 结点的度——有几个孩子(分支)
- 树的度——各结点的度的最大值
- 有序树:逻辑上看,树中结点的各子树从左至右是有次序的,不能互换
无序树:逻辑上看,树中结点的各子树从左至右是无次序的,可以互换
常考性质:
- 结点数=总度数+1
- 度为m的树、m叉树 的区别
- 度为m的树第 i 层至多有 m i − 1 m^{i-1} mi−1 个结点(i≥1)
m叉树第 i 层至多有 m i − 1 m^{i-1} mi−1 个结点(i≥1) - 高度为h的m叉树至多有 m h − 1 m − 1 \frac {m^h-1}{m-1} m−1mh−1 个结点。
- 高度为h的m叉树至少有 h 个结点
高度为h、度为m的树至少有 h+m-1 个结点 - 具有n个结点的m叉树的最小高度为 log m ( n ( m − 1 ) + 1 ) \log _m(n(m - 1) + 1) logm(n(m−1)+1)(向上取整)
森林:是m(m≥0)棵互不相交的树的集合
二叉树
二叉树的基本概念
二叉树是n(n≥0)个结点的有限集合:
- 或者为空二叉树,即n = 0
或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树
又分别是一棵二叉树。
特点:
- 每个结点至多只有两棵子树
- 左右子树不能颠倒 (二叉树是有序树)
特殊二叉树
- 满二叉树:一棵高度为h,且含有 2 h − 1 2^h - 1 2h−1个结点的二叉树
- 完全二叉树:当且仅当其每个结点都与高度为h的满二叉树中编号为1~n的结点一一对应时,称为完全二叉树
- 二叉排序树:一棵二叉树或者是空二叉树,或者是具有如下性质的二叉树:
左子树上所有结点的关键字均小于根结点的关键字;
右子树上所有结点的关键字均大于根结点的关键字。
左子树和右子树又各是一棵二叉排序树 - 平衡二叉树:树上任一结点的左子树和右子树的深度之差不超过1。
平衡二叉树能有更高的搜索效率
满二叉树 | 完全二叉树 |
---|---|
只有最后一层有叶子结点 | 只有最后两层可能有叶子结点 |
不存在度为1的结点 | 最多只有一个度为1的结点 |
按层序从 1 开始编号,结点 i 的左孩子为 2i,右孩子为 2i+1;结点 i 的父节点为 [ i/2 ](如果有的话) | 同左 |
i≤ [n/2] 为分支结点, i>[n/2] 为叶子结点 | |
如果某结点只有一个孩子,那么一定是左孩子 |
常见考点
- 设非空二叉树中度为0、1和2的结点个数分别为n0、n1和n2,则 n0 = n2 + 1
- 二叉树第 i 层至多有 2 i − 1 2^{i-1} 2i−1 个结点(i≥1)
- 高度为h的二叉树至多有 2 h − 1 2^ℎ-1 2h−1个结点(满二叉树)
- 具有n个(n > 0)结点的完全二叉树的高度h为 log 2 ( n + 1 ) \log _2(n+1) log2(n+1)(向上取整) 或 [ log 2 n ] + 1 [\log _2n]+1 [log2n]+1
第 i 个结点所在层次为 log 2 ( i + 1 ) \log _2(i+1) log2(i+