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

<script type="text/javascript"> google_ad_client = "pub-8800625213955058"; /* 336x280, 创建于 07-11-21 */ google_ad_slot = "0989131976"; google_ad_width = 336; google_ad_height = 280; // </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 我用composite模式写的一个二叉树的例子 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()); }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值