一、实验目的及要求
1:找出一棵二叉树中相距路径最远的两个节点。
2:构造一棵哈夫曼树。
二、实验内容及步骤
1、
(1)
public class DistanceOfBinaryTree {
public static void main(String[] args) {
TreeNode p0 = new TreeNode(0);
TreeNode p1 = new TreeNode(1);
TreeNode p2 = new TreeNode(2);
TreeNode p3 = new TreeNode(3);
TreeNode p4 = new TreeNode(4);
TreeNode p5 = new TreeNode(5);
TreeNode p6 = new TreeNode(6);
TreeNode p7 = new TreeNode(7);
TreeNode p8 = new TreeNode(8);
TreeNode p9 = new TreeNode(9);
p0.lchild = p1;
p0.rchild = p2;
p1.lchild = p3;
p1.rchild = p4;
p2.lchild = p5;
p2.rchild = p6;
p3.lchild = p7;
p5.rchild = p8;
p8.lchild = p9;
Result res = new Result();
maxDistance(p0, res);
System.out.println(res.maxDistance);
}
public static void maxDistance(TreeNode root, Result res){
if(root == null)
return;
Result lhs = new Result();
Result rhs = new Result();
maxDistance(root.lchild, lhs); //左子树的最大高度及最远距离
maxDistance(root.rchild, rhs); //右子树的最大高度及最远距离
res.maxHeight = Math.max(lhs.maxHeight, rhs.maxHeight) + 1;
res.maxDistance = Math.max(Math.max(lhs.maxDistance, rhs.maxDistance), lhs.maxHeight + rhs.maxHeight + 2);
private static class Result{
private int maxDistance = 0; //初始化最远距离(根的左右孩子结点处为0)
private int maxHeight = -1; //初始化最大高度(根节点处为-1)
}
private static class TreeNode{
private int rootl;
private TreeNode lchild;
private TreeNode rchild;
TreeNode(int rootl){
this.rootl = rootl;
}
(2)
public class HuffmanTree01 {
int[] weight;
HuffmanNode node;
int flag;
public HuffmanTree01() {
}