第七章 二叉树

满二叉树:所有度为0的节点位于同一层,其他所有节点的度都为2

完全二叉树:最后一层的节点均靠左,除去最后一层为满二叉树

性质1:

一棵非空二叉树的第i层上最多有$2^{i-1}$个节点

性质2:

深度为h的二叉树最多有$2^h-1$个节点

性质3:

对于任何一棵二叉树T,如果度为0的节点数为n0,度为2的节点数为n2,那么

$$ n0=n2+1 $$

假设一颗二叉树的总的节点个数为n,度为1的节点个数为n1,

可知

$$ n=n0+n1+n2 $$

又可知节点的度代表了这个节点下面有几个节点,那么所有节点的度加起来,就是除了根节点之外所有节点的个数了,用这个来表示总的节点个数为:

$$ n = 0n0+1n1+2n2+1=n1+2n2+1 $$

可知 $$ n = n0+n1+n2=n1+2*n2+1 $$

所以 $$ n0 = n2+1 $$

性质4

对于具有n个节点的完全二叉树,如果按照从上到下,从左至右的方法对所有节点从1开始顺序编号,对于序号为i的节点有:

如果i>1,那么其父节点为i/2

如果其左孩子存在,那么序号为2i,如果其右孩子存在则序号为2*i+1

7.6 穿线二叉树

对于一个具有n个节点的二叉树,可知一共会存2*n个指针,但是,只用了其中的n-1个,剩下的n+1个指针都是空指针。

在实际应用中我们可以根据需要利用这些空指针做一个穿线二叉树,即线索二叉树

做法为将原来空的左孩子指针指向父节点,将原来空的右孩子指针指向先序遍历(中序,后序)下的后继节点。

产生的穿线二叉树分别叫做 前序穿线二叉树 中序穿线二叉树 后序穿线二叉树

为了区分指针指向的是左右孩子,还是父节点和后继节点,需要额外在每个节点增加两个标记位,分别标记。

省不了内存,但是可以允许你从某一个节点往前找,或往后找。但感觉也没有太大优势。

7.7 树,森林,和二叉树的转换

树转二叉树

1 在所有兄弟节点之间添加一条线

2 对于每个节点,保留第一个孩子的连线,删除其他孩子的连线

二叉树到树

将一个节点的左孩子的右孩子,及其右孩子的右孩子,等等全部连接到该节点,去除之前的连接

文章目录