陈斌彬的技术博客

Stay foolish,stay hungry

二叉树notes(原创)

1

img

2

img img

3

孩子兄弟表示法(二叉链表树)

img

顾名思义,孩子兄弟表示法的每个节点有两个指针域,一个指向其长子,另一个指向其兄弟.

4

img

5

平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。

img img

6

img

7

img

8

img img img

9

img

在一棵度为3的树中,度为2的结点个数是1,度为0的结点个数是6,则度为3的结点个数是
设度为0的结点个数为n0,度为1的结点个数为n1,度为2的结点个数为n2,度为3的个数n3
树中结点总数n0+ n1 + n2 + n3,所有边的数量为0 * n0 + 1 * n1 + 2 * n2 + 3 * n3
树中结点比边多1个,合并这两个式子就可以得到:n0 = 1 + n2 + 2 * n3
代入数据可以得到n3 = 2,度为3的结点个数是2 

10

img img img img

11

img

12

img

13

img img

14

img img

15

img img

16

二叉查找树是一种查找效率非常高的数据结构,它有三个特点。

  1. 每个节点最多只有两个子树。
  2. 左子树都为小于父节点的值,右子树都为大于父节点的值。
  3. 在n个节点中找到目标值,一般只需要log(n)次比较。

img

B树的特点也有三个。

img

  1. 一个节点可以容纳多个值。比如上图中,最多的一个节点容纳了4个值。
  2. 除非数据已经填满,否则不会增加新的层。也就是说,B树追求"层"越少越好。
  3. 子节点中的值,与父节点中的值,有严格的大小对应关系。一般来说,如果父节点有a个值,那么就有a+1个子节点。比如上图中,父节点有两个值(7和16),就对应三个子节点,第一个子节点都是小于7的值,最后一个子节点都是大于16的值,中间的子节点就是7和16之间的值。

17

img

18

img

19

img

Resource Reference