我们这次来使用java简单的实现二叉树的添加保存和取值功能。利用Comapareble接口实现二叉树的对象数据比较,利用中序遍历的方法取得对象数组值并返回。

package test; 
class BinnaryTree{                          
    //定义二叉树 
    private class Node{ 
        private Comparable data;            
        //定义要保存的数据,数据需要比较要实现Comparable 
        private Node left;                  
        //定义左节点 
        private Node right;                 
        //定义右节点 
        public Node(Comparable data){       
            //保存数据 
            this.data = data; 
        } 
        public void addNode(Node newNode) { 
            if(newNode.data.compareTo(this.data)>=0){   
                //传入的数据和当前节点数据比较,比它大则放右边小则放左边 
                if(this.right==null){ 
                this.right = newNode; 
                }else{ 
                    this.right.addNode(newNode); 
                } 
            }else{ 
                if(this.left == null){ 
                    this.left = newNode; 
                }else{ 
                    this.left.addNode(newNode); 
                } 
            } 
        } 
        public void toArrayNode() {                     
            //采用中序遍历的方法取值 
            if(this.left!=null){ 
                this.left.toArrayNode(); 
            } 
            BinnaryTree.this.retArray[BinnaryTree.this.foot++] = this.data; 
            if(this.right != null){ 
                this.right.toArrayNode(); 
            } 
        } 
    } 
    private Node root = null;                           
    //定义根节点 
    private int count = 0;                              
    //定义一个数据值 private int foot = 0;                               
    //定义下标,数组索引下标取值时使用 
    private Object retArray[]; 
    public void add(Object data){                       
        //增加数据 
        if(data==null){ 
            return ; 
        } 
        Node newNode =  new Node((Comparable)(data));   
        //向下转型,如果不是Comparable对象的子类则抛出异常 
        if(this.root == null){ 
            this.root = newNode; 
        }else{ 
            this.root.addNode(newNode); 
        } 
        this.count++; 
    } 
    public boolean isEmpty(){                           
        //判断是否为空 
        return this.count==0 && this.root==null; 
    } 
    public int size(){                                  
        //取得当前二叉树的长度 
        return this.count; 
    } 
    public Object[] toArray(){                          
        //通过Object对象数组取值 
        if(this.isEmpty()){ 
            return null; 
        } 
        retArray = new Object[this.count]; 
        this.foot = 0; 
        this.root.toArrayNode(); 
        return this.retArray; 
    } 
} 
public class Test {                         //定义测试类 
 public static void main(String[] args) { 
        BinnaryTree bt = new BinnaryTree(); 
        bt.add("C"); 
        bt.add("B"); 
        bt.add("W"); 
        bt.add("E"); 
        bt.add("G"); 
        bt.add("H"); 
        bt.add("A"); 
        bt.add("N"); 
        System.out.println("二叉树是否为空:"+bt.isEmpty()+",总共有"+bt.size()+"个数据"); 
        Object[] obj = bt.toArray(); 
        for (int i=0; i<obj.length ; i++){ 
            String str = (String)obj[i]; 
            System.out.println(str); 
        } 
    } 
}


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

java多线程经典案例(生产者和消费者)