面试-树的总结

http://student.zjzk.cn/course_ware/data_structure/web/shu/shu6.1.1.1.htm

1.  概念:树是一种重要的非线性的、具有层次关系的结构。

2.  树的递归定义

树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个:

a)  有且仅有一个特定的称为根(Root)的结点;

b)  其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树(Subree)。

二叉树

1.  概念

A.  二叉树中,每个节点最多只有两个课子树,并且有左右之分;

B.  不是树的特殊情形,是不同的数据结构

2. 性质:

A.  二叉树第i层的节点书目最多为2i-1 (i≥1)

B.  深度为k的二叉树至多有2k–1 (i≥1)

C.  若终端节点的个数为n0,度为2的节点为n2个,则有n0 = n2 + 1

1)  n = n0 + n1 + n2

2)  n = n1 + 2*n2 + 1

3. 特殊形式:

A.  满二叉树:一颗深度为k且有2k–1个结点

1)  没有度为1的节点,每一层都是最大的节点数

2)  叶子节点都在最下一层

B.  完全二叉树:

1)  叶子所在的层数相差最大为1;叶子都集中靠在左边

2)  具有n个结点完全二叉树的深度为

3)  满二叉树 肯定 是完全二叉树; 完全不一定二叉

4. 顺序存储:

A.  完全二叉树结点编号:假设编号为i的节点是Ki (1≤i≤n)

 

1)  若i>1,则其双亲编号为 

2)  若2*i≤ n,则Ki的左孩子编号为 2*i; 否则Ki肯定是叶子结点,因此可知编号  的节点必定是叶子节点。

3)  若2*i+ 1 ≤ n,则Ki的右孩子编号为 2*i + 1;否则没有右孩子

4)  若i为奇数且不为1, 则Ki的左兄弟为i - 1;否则Ki无左兄弟。

5)  若i为偶数且不为n,则Ki的右兄弟为 i + 1;否则Ki无右兄弟

B.  一般的二叉树顺序存储:

1)  添加虚节点构成完全二叉树(符号)

2)  一般二叉树用顺序存储,易造成空间浪费

3)  在删除时,需要移动大量的结点。

5. 遍历

A.  三种方法

1)  中序遍历(L N R)

2)  先序遍历(N L R)

3)  后序遍历(L R N)

B.   

6. 线索二叉树

A.  “线索”是遍历服务的,在遍历时,其每个节点的上一个遍历点和下一个遍历点分别叫做:前驱和后继,其计算是比较耗时的。因此,在节点中加入了线索域:

7. 树、森林与二叉树的转换

A.  二叉树 与 树和森林之间是一一对应的。

B.  树 转换 二叉树

1)  树中每个结点最多只有一个最左边的孩子(长子)和一个右邻的兄弟

a)  在所有兄弟节点间加一条连线

b)  对每个结点,保留与其长子的连线,删掉其他孩子的连线

2)    由于树根没有兄弟,故树转化为二叉树后,二叉树的根结点的右子树必为空。

 

C.  森林 到 二叉树

1)  将森林中的每棵树变为二叉树

2)  因为转换所得的二叉树的根结点的右子树均为空,故可将各二叉树的根结点视为兄弟从左至右连在一起,就形成了一棵二叉树。

 

D.  二叉树到树、森林

1)  若结点x是双亲y的左孩子,则把x的右孩子,右孩子的右孩子,…,都与y用连线连起来,最后去掉所有双亲到右孩子的连线。

 

8. 最优二叉树

A.  树的路径长度

1)  从树根到每个结点的路径长度之和。在节点数相同的二叉树中,完全二叉树的路径长度最短。

2)  加权路径长度 = 树的代价:所有叶子结点(的权重)于路径

B.  最优二叉树或哈夫曼树

1)  在权为w1,w2,..,wn的n个叶子构成的二叉树中,其带权路径最小的二叉树称之为最优二叉树或这哈夫曼数。

2)  叶子权重相同时,完全二叉树就是最优二叉树

3)  在最优二叉树中,权重越大,叶子节点离根越远。

4)  构造最优二叉树的算法 – 哈夫曼 算法

C.  哈夫曼算法

1)  通过频率,构造哈夫曼树

 

 

 

 

 

http://blog.csdn.net/v_JULY_v/article/details/6530142

http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html

B树

 

 

你可能感兴趣的:(算法)