要点 层次关系

1.树的定义:

2.树的基本术语:度(子树的个数,而不是离散数学中的度)  祖先 层数(规定根节点的层数为1), 宽度

一.存储结构

1.双亲表示法 顺序表 (有点像并查集的存储方式)

2.孩子表示法 链表 n个节点有n个孩子链表 n个头指针又构成一个线性表

3.孩子兄弟表示法(又称二叉链表表示法)

二.二叉树

1.基本性质:(注意区别的含义)

①  (设n,n_0,n_1,n_2,讨论树的分枝数(n-1)每个n_i的贡献)

 ④

2.前,中序,后中序可确定一个二叉树,但前后序无法确定一个二叉树

3.二叉树的存储结构

①顺序存储结构:适合存储完全二叉树,当空树比较多的时候,相当浪费空间

 ②二叉链表(左右孩子) 三叉链表(多了一个parent指针域)

4.遍历森林的方法

三.树,森林和二叉树的转换 核心是什么

①树->二叉树: ①加线 ②去线 ③层次调整

②森林->二叉树: ① ② ③

③二叉树->树/森林: ①


四.哈夫曼算法(核心,谁权值大,谁就更靠近根节点)


五.线索二叉树

左右儿子指针为空的时候,tag = 1 ,左孩子会指向前驱,右孩子会指向后继元素 (前驱后继的含义要看你是进行什么遍历)



错题集

1. 00 100 101 110 111 这一组无法形成哈夫曼树,因为哈夫曼树的度只有0或者2.


2. 完全二叉树有100个节点,那么它有多少个叶子节点

答:50.

解:叶子节点出现在最后两层(不是只在最后一层),所以分别算一下就好了

更好的思路:给这100个数编号,考虑最后一个节点,那他的双亲的编号应该为[100/2]=50,那编号为50的点之后应该就不会有字节点了,自然就是100 - 50 = 50 个.

3.已知一棵度为 3 的树有 2 个度为 1 的结点,3 个度为 2 的结点,4 个度为 3 的结点。则该树中有( ) 个叶子结点。

答案:12   设X,节点数为X + 9 ,分枝数为X + 8 ,然后列各度贡献解方程即可.

4.在有 n 个叶子的哈夫曼树中,叶子结点总数为( ),分支结点总数为( )。

哈夫曼树只含度为0或2的节点,根据二叉树的性质1可知 n0 = n2 + 1

5.二叉树是度为 2 的树。  错: 还有0,1呢

6.线索二叉树中某结点 R 没有左孩子的充要条件是? R.ltag = 1;