public class MyTreeSet<T> { private Node root; private static class Node<T>{ T value; Node left; Node right; public Node(T e){ value=e; } public boolean addChild(T e){ Comparable obj= (Comparable) e; int result=obj.compareTo(value); if (result==0){//数据不允许重复,重复就返回false,表示添加失败 return false; }else if(result<0){ //e 小于 value 向左侧添加 if (left==null){ left=new Node(e); System.out.println("添加:"+value+"的左侧"+e); return true; }else { return left.addChild(e); } }else { //e>value 向右侧添加 if (right==null){ right=new Node(e); System.out.println("添加:"+value+"的右侧"+e); return true; }else { return right.addChild(e); } } } } public boolean add(T e){ //先检查对象是否能进行大小比较 if (!(e instanceof Comparable)){ throw new RuntimeException("无法比较方法大小:"+e); } if (root==null){ root=new Node(e); System.out.println("添加跟元素:"+e); return true; }else { //先和根元素数据比较大小,如果小就放到右侧 //Comparable val=(Comparable)e;//转换类型以后就为了调用比较大小的方法 //obj1.compareTo(obj)2 如果返回0 就表示俩个对象相等 //如果是正数表示obj1大 如果返回负数obj1小 //int result = val.compareTo(root.value); return root.addChild(e); } } }
以下是对手写的二叉树添加进行测试
新建一个测试类
public class text { public static void main(String[] args) { MyTreeSet<Integer> treeSet=new MyTreeSet<>(); treeSet.add(680); treeSet.add(560); treeSet.add(750); treeSet.add(520); } }
实现二叉树的实现原理我们只有在debug的时候可以清楚了解到
小编对二叉树进行打桩输出结果如下:
添加跟元素:680
添加:680的左侧560
添加:680的右侧750
添加:560的左侧520
欢迎提出意见供我学习!!!!