用composite模式写的一个二叉树的例子

文章作者 100test 发表时间 2007:03:14 16:33:32
来源 100Test.Com百考试题网


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 **************/
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()).
}



相关文章


Java_J2EE中文问题终极解决之道
JAVA进阶:Java打印程序设计全攻略
用composite模式写的一个二叉树的例子
设计模式:用Java动态代理实现AOP
JavaSE6之脚本引擎让程序如虎添翼
Java中利用通讯API编写的短信软件
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛