1,Component 是抽象组件
Tree 和Leaf 继承Component
private String name; //树或叶子的名称
addChild(Component leftChild,Component rightChild);
//给一个树上加上一个左孩子,一个右孩子
getName(){return name;}
getTreeInfo(){} //得到树或叶子的详细信息
getLength(); //得到树的高度
2,Tree 二叉树,一个左孩子,一个右孩子
3,Leaf 是叶子节点
4,Test 是测试节点
/** Component.Java **************/
/** Component.Java **************/ package binarytree; public abstract class Component { private String name; public abstract Component addChild(Component leftChild,Component rightChild); public String getName(){return name;} public void getTreeInfo(){} public abstract int getLength(); } /** Leaf.java **************/ package binarytree; public class Leaf extends Component{ private String name; private Component leaf=null; public Leaf(String name) { this.name=name; }
public Component addChild(Component leftChild,Component rightChild){ return this; } public String getName(){ return name; } public int getLength() { return 1; } public static void main(String[] args) { } } /** Tree.java **************/ package binarytree; public class Tree extends Component { private String name; private Component leftChild; private Component rightChild; public Tree(String name,Component leftChild,Component rightChild) { this.name=name; this.leftChild=leftChild; this.rightChild=rightChild; } public Tree(String name) { this.name=name; this.leftChild=null; this.rightChild=null; } public Component addChild(Component leftChild,Component rightChild){ this.leftChild=leftChild; this.rightChild=rightChild; return this; } public String getName(){ return name; } public void getTreeInfo() //得到树或叶子的详细信息 //先打印自己的名字,再遍例左孩子,再遍例右孩子 //如果左孩子或右孩子是树,递归调用 { System.out.println(" this trees name is "+getName()); if(this.leftChild instanceof Leaf){ System.out.println(getName()+"s left child is "+this.leftChild.getName()+",it is a Leaf"); } if(this.leftChild instanceof Tree){ System.out.println(getName()+"s left child is "+this.leftChild.getName()+",it is a Tree"); this.leftChild.getTreeInfo(); } if(this.leftChild==null){ System.out.println(getName()+"s left child is a null"); } if(this.rightChild instanceof Leaf){ System.out.println(getName()+"s right child is "+this.rightChild.getName()+",it is a Leaf"); } if(this.rightChild instanceof Tree) { System.out.println(getName()+"s right child is "+this.rightChild.getName()+",it is a Tree"); this.rightChild.getTreeInfo(); } if(this.rightChild==null){ System.out.println(getName()+"s right child is a null"); } //System.out.println(getName()+"s 高度 是 "+getLength()); } public int getLength() { //比较左孩子或右孩子的高度,谁大,+1 返回 // 空孩子的处理 if(this.leftChild==null) { if(this.rightChild==null) return 1; else return this.rightChild.getLength()+1; }else { if(this.rightChild==null) { return this.leftChild.getLength()+1; }else { if((this.leftChild.getLength())>=(this.rightChild.getLength())) return this.leftChild.getLength()+1; else return this.rightChild.getLength()+1; } } } public static void main(String[] args) { } } /** Test.java 测试类 **************/ package binarytree; public class Test { public Test() {} public static void main(String[] args) { Component tree=new Tree("luopeng"); Component leaf_child=new Leaf("luopeng1"); Component right_child=new Leaf("luopeng2"); tree=tree.addChild(leaf_child,right_child); //tree=tree.addRightChild(right_child); tree.getTreeInfo(); Component tree1=new Tree("luopeng2"); tree1.addChild(tree,leaf_child); tree1.getTreeInfo(); Component tree2=new Tree("luopeng3"); tree2.addChild(tree,null); tree2.getTreeInfo(); Component tree4=new Tree("luopeng4"); tree4.addChild(null,tree); tree4.getTreeInfo(); System.out.println(tree4.getName()+"的高度是 "+tree4.getLength()); } }
C:\java>java Test
this trees name is luopeng
luopengs left child is luopeng1,it is a Leaf
luopengs right child is luopeng2,it is a Leaf
this trees name is luopeng2
luopeng2s left child is luopeng,it is a Tree
this trees name is luopeng
luopengs left child is luopeng1,it is a Leaf
luopengs right child is luopeng2,it is a Leaf
luopeng2s right child is luopeng1,it is a Leaf
this trees name is luopeng3
luopeng3s left child is luopeng,it is a Tree
this trees name is luopeng
luopengs left child is luopeng1,it is a Leaf
luopengs right child is luopeng2,it is a Leaf
luopeng3s right child is a null
this trees name is luopeng4
luopeng4s left child is a null
luopeng4s right child is luopeng,it is a Tree
this trees name is luopeng
luopengs left child is luopeng1,it is a Leaf
luopengs right child is luopeng2,it is a Leaf
luopeng4的高度是 3