站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题composite模式写的二叉树的例子

composite模式写的二叉树的例子

摘要: composite模式写的二叉树的例子

</td> </tr> <tr> <td height="35" valign="top" class="ArticleTeitle"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="198" height="86" align="center" valign="top"> </td> <td width="486" valign="top">
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;

  }

</td> </tr> </table>

 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

</td> </tr> <tr>


↑返回目录
前一篇: 传递引用的经典
后一篇: 泛型二叉树