Java二叉树链表的简单实现(保存和取出)

来源:互联网 发布:java课程设计心得体会 编辑:程序博客网 时间:2024/05/12 19:41
简单的实现二叉树的添加保存和取值功能。利用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);        }    }}
0 0
原创粉丝点击