二叉树
二叉树是常见的数据结构:
1.相关术语:
二叉树的高度有两种定义:
- 从根节点到最深结点的最长路径的节点数。
- 从根到最深结点的最长路径的边数。
本文以根结点到最深结点的最长路径的结点数为准,也即高度,深度基数为1
- 树的高度:树内所有结点高度的最大值,也就是根结点的高度,也就是树的层数。上图树的高度为4
- 树的深度:树内所有结点深度的最大值,也就是所有叶子结点深度的最大值,也就是树的层数。上图树的深度为4
- 树的度:是树内所有结点度的最大值
- 结点的高度:从该结点向下分支的叶节点开始自底向上逐层累加。如D的高度为2
- 结点的深度:从根结点到该结点的层数。如D的深度为3
- 结点的度:结点拥有的子树的个数,叶子结点的度为0
总结:树的高度和深度是相等的:最深的叶子结点的深度就是树的深度,根结点的高度就是树的高度。
2.二叉树的性质:
二叉树有以下几个性质:TODO(上标和下标)
- 二叉树第i层上的结点数目最多为 2{i-1} (i≥1)。
- 深度为k的二叉树至多有2{k}-1个结点(k≥1)。
- 包含n个结点的二叉树的高度至少为log2 (n+1)。
- 在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。
3.二叉树的类型
- 完全二叉树:若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树
- 满二叉树:除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
- 平衡二叉树:平衡二叉树又被称为AVL树(区别于AVL算法),它是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
4.完全二叉树的基本性质
完全二叉树除了拥有二叉树的基本性质外,还具有以下性质:
- 具有n个结点的完全二叉树的深度为 [log2n]+1 (注:[ ]表示向下取整)
- 有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:
若I为结点编号则 如果I>1,则其父结点的编号为I/2;
如果2I<=N,则其左孩子(即左子树的根结点)的编号为2I;若2I>N,则无左孩子;
如果2I+1<=N,则其右孩子的结点编号为2I+1;若2I+1>N,则无右孩子。 - 给定N个节点,能构成h(N)种不同的二叉树。