数据结构复习 4。1 Tree
1.Binary Tree
是Tree但是相对于有严格要求,有两个子树。
特性:
1.N元素一定有N-1条边。
2.第i层,至多有2^i个元素。
3.高为h的树至少有h+1个元素,至多有 2^(h+1)-1。
4.叶节点的个数等于度为2节点的个数+1。解释:
Proof: 设: 度为1的结点数是 n1个 n = n0 + n1 + n2 n = B+1 这里B为分支数 n0 + n1 + n2 = 1*n1 + 2*n2 + 1 n0 = n2 + 1
5.有n个元素的二叉树,高度最多n-1.最少log2底n+1-1取小。
2.满二叉树,正好有2^(h+1)-1个元素。
3.完全二叉树,只缺少某个节点的左叶或右叶,只允许叶节点缺少。
String:
java和c++的不同之处,在java中字符串不是字符数组,所以不能以字符数组方式进行操作。例如str[1]='a'是错误,只能通过函数来操作。
树和森林,二叉树之间的转换可参考:http://www.cnblogs.com/zhuyf87/archive/2012/11/04/2753950.html
树---->森林
每个树都转化为二叉树,将每棵二叉树用根的右链连接。
数的遍历:
深度优先遍历:
先序遍历,先序遍历第一个数,第二个数。。。。。
后序遍历,后序遍历第一个数,第二个数。。。。
线索二叉树:
用leftthread 0时,表示左子女,leftthread=1指向前驱结点。
霍夫曼树:增长树,给每个结点增加空叶节点,对叶节点增加两个空叶节点,对只有一个左节点或右节点增加一个空叶节点。
哈夫曼算法:
给出m个实数W1,W2,…,Wm (m>=2) 作为m个外结
点的权构造一棵增长树, 使得带权外路径长度和最小。
对电文进行二进制编码:
题目:
霍夫曼编码 是霍夫曼树在数据编码中一种应用。 具体的讲用于通信的 二进制编码中。 设一电文出现的字符为D={M,S,T,A,Q, K} , 每个字符出现的频率为W={10,29,4,8,15,7}, 如 何对上面的诸字符进行二进制编码, 使得 1)该电文的总长度最短。 2)为了译码,任一字符的编码不应是另一字符的编码的前缀
算法:
算法: 利用Huffman算法, 把{10,29,4,8,15,7}作为外部结点的权, 构造具有最小带权外路径长度的扩充二叉树,把每个结点的左子女的边标上0, 右子女标上1。 这样从根到每个叶子的路径上的号码连接起来, 就是外结点的字符编码。