数据结构复习 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={102948157}, 如
 何对上面的诸字符进行二进制编码, 使得
     1)该电文的总长度最短。
     2)为了译码,任一字符的编码不应是另一字符的编码的前缀

算法:

算法: 利用Huffman算法, 把{102948157}作为外部结点的权, 构造具有最小带权外路径长度的扩充二叉树,把每个结点的左子女的边标上0, 右子女标上1。 这样从根到每个叶子的路径上的号码连接起来, 就是外结点的字符编码。

 

posted @ 2016-05-23 11:22  bounce  阅读(232)  评论(0编辑  收藏  举报