链表,哈弗曼树

阅读更多
  链表是一种重要的数据结构,在程序设计中占有很重要的地位。C语言和C++语言中是用指针来实现链表结构的,由于Java语言不提供指针,Java语言中的对象引用实际上是一个指针所以我们可以编写这样的类来实现链表中的结点。
  列如我们可以编写一个这样的类:
class Node
  {
  Object data;
  Node next;//指向下一个结点
  }
然后再编写一个类构造一个链表,它应该有add方法来添加节点,getlength来得到链表的长度,还应该有delete(int index)方法来删除指定位置的节点,
  哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。

所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为:

WPL=(W1*L1+W2*L2+W3*L3+...+ Wn*Ln)

N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。

可以证明哈夫曼树的WPL是最小的。

列如:public class TreeNode {
public TreeNode left;
public TreeNode right;
public int date;
public String code = "";
}

public class HPMtree {

public static void main(String[] arg0) {

TreeNode n1 = new TreeNode();
n1.date = 1;

TreeNode n2 = new TreeNode();
n2.date = 2;

TreeNode n3 = new TreeNode();
n3.date = 3;

TreeNode n4 = new TreeNode();
n4.date = 4;

TreeNode n5 = new TreeNode();
n5.date = 5;

TreeNode Nfirst = new TreeNode();
Nfirst.date = n1.date + n2.date;

Nfirst.left = n1;
Nfirst.left = n2;

TreeNode Nsecond = new TreeNode();
Nsecond.date = Nfirst.date + n3.date;

Nsecond.left = Nfirst;
Nsecond.right = n3;

TreeNode Nthird = new TreeNode();
Nthird.date = n4.date + n5.date;

Nthird.left = n4;
Nthird.right = n5;

TreeNode root = new TreeNode();
root.date = Nsecond.date + Nthird.date;

root.left = Nsecond;
root.right = Nthird;

}
}



你可能感兴趣的:(数据结构)