java学习笔记——哈夫曼树

哈夫曼树

 

 

1、树的结点(=父节点+左孩子+右孩子+信息元素)

/**

 * 树的结点

 * @author Administrator

 *

 */

public class TreeNode {

//结点中的信息元素

int num;

//父结点

TreeNode parent = null;

//左结点

TreeNode left = null;

//右结点

TreeNode right = null;

//构造函数

public TreeNode(int num){

this.num = num;

}

}

 

 

 

2、一个重要的接口:Comparator(比较容器)

使用模板:

Public class 类名 implements Comparator{

   Public int compare(int a,int b){

   Return ****;

   }

}

/**

 * 创建一个比较的容器

 */

class MyComparator implements Comparator{

public int compare(TreeNode node1, TreeNode node2) {

return node1.num - node2.num;

}

}

  

3、一个重要的优先队列:PriorityQueue;

性质加入的元素可以根据我们自己设计的比较方式(比较容器)进行自动排序;

使用模板:

PriorityQueue<E> list = new PriorityQueue<E>(初始化大小new MyComparator());

 

 

 

4

import java.util.Comparator;

import java.util.PriorityQueue;

/**

 * 构造树

 * @author Administrator

 *

 */

public class Tree {

/**

 * 构造函数

 */

public Tree(int[] array){

TreeNode rootnode = ListToTree(ArrayToList(array));

PrintTree(rootnode);

}

/**

 * 创建一个可以自动排序的队列,并且将数组放入这个队列之中

 */

public PriorityQueue ArrayToList(int array[]){

//根据比较容器创建一个优先队列

PriorityQueue list = new PriorityQueue(11, new MyComparator());

for(int i=0;ilength;i++){

//创建结点对象

TreeNode node = new TreeNode(array[i]);

//将结点一个个放入优先队列

list.add(node);

}

//返回这个优先队列

return list;

}

/**

 * 将优先队列自动转化为树结构

 */

public TreeNode ListToTree(PriorityQueue list){

while(list.size() > 1){

//先取出前两个结点

TreeNode node1 = list.poll();

TreeNode node2 = list.poll();

//通过这两个结点构建一棵基础三角树

TreeNode root = new TreeNode(node1.num  + node2.num);

root.left = node1;

root.right = node2;

node1.parent = root;

node2.parent = root;

//将新结点放入队列

list.add(root);

}

//取出最后一个结点

TreeNode root = list.poll();

return root;

}

/**

 * 遍历整棵树

 */

public void PrintTree(TreeNode node){

if(node != null){

//输出树

System.out.println(node.num);

TreeNode left = node.left;

PrintTree(left);

TreeNode right = node.right;

PrintTree(right);

}

}

/**

 * 创建一个比较的容器

 */

class MyComparator implements Comparator{

public int compare(TreeNode node1, TreeNode node2) {

return node1.num - node2.num;

}

}

}

你可能感兴趣的:(java学习笔记)