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);
        }

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值