二叉樹add底層原理

早晨的太陽_發表於2020-09-25
//二叉樹
public class ErchashuTest<E extends Comparable<E>>  {
    private class Node{
        public E e;
        public Node left, right;
        public Node(E e){
            this.e = e;
            this.left = null;
            this.right = null;
        }
    }
    private Node root;
    private int size;
    public ErchashuTest(){
        this.root = null;
        this.size = 0;
    }
    //得到數量
    public int getSize(){
        return this.size;
    }
    //新增
    public void add(E e){
        //首次接收到的e就是根節點
        root = add(root, e);
    }
    private Node add(Node node, E e){
        //首先判斷node(根節點是否為空)
        if (node == null){
            //如果為空,數量++,返回e
            size++;
            return new Node(e);
        }
        //如果不為空就代表已有根節點,判斷  e - 根節點是否 < 0  (例如16 - 28 < 0)
        if (e.compareTo(node.e) < 0){
            //16 - 28 < 0  調add方法,去判斷節點的左邊是否為null,如果為空就把e放在當前節點的左邊節點,否則繼續往下遞迴
            node.left = add(node.left, e);
        } else if(e.compareTo(node.e) > 0){
            //30 - 28 > 0  調add方法,去判斷節點的右邊是否為null,如果為空就把e放在當前節點的右邊節點,否則繼續往下遞迴
            node.right = add(node.right, e);
        }
        //返回當前節點
        return node;
    }
}
//測試
public class eTest{
    public static void main(String[] args) {
        ErchashuTest<Integer> ecsTest = new ErchashuTest<>();
        ecsTest.add(28);
        ecsTest.add(16);
        ecsTest.add(13);
        ecsTest.add(30);
    }
}

相關文章