二分搜索樹的簡單原理

首先了解二叉樹

在這裏插入圖片描述

  • 和鏈表一樣,是動態數據結構(在創建這種數據結構時不需要考慮容基)
  • 每一個元素存在節點中,除了元素之外,還有兩個指向其他節點的引用,分別叫做left和right,通常叫做左孩子和右孩子。
  • 對於上圖15節點來說,左邊指向6節點,右邊指向23節點。同理6節點,左邊有4節點,右邊有7節點。
  • 對於每一個節點最多隻能分成兩個叉,二叉樹每個節點最多有兩個孩子
    -二叉樹具有唯一的根節點,15節點就是根節點
  • 一個孩子都沒有的節點被稱爲葉子節點,即左右孩子都爲空。
  • 每個節點最多只能有一個父親節點
  • 二叉樹具有天然的遞歸結構
  • 每一個節點的左子樹,右子樹也是二叉樹(15的左孩子是6,6節點可以看作是4,7,5的根節點;23可以看作71,50的根節點)。每一顆二叉樹,它的左側和右側又分別連接了節點個數更小的兩顆二叉樹。
  • 二叉樹不一定是“滿的”。一個節點也可以看作是二叉樹,甚至NULL也可以看作是二叉樹。

二分搜索樹

  • 是一顆二叉樹
  • 具有自己獨特的性質:
    每一個節點的值都要大於其左子樹所有節點的值小於右子樹所有節點的值
  • 每一顆子樹也是二分搜索樹
  • 存儲的元素必須有可比較性(比如存儲學生信息,使用學號進行查找等,數據與數據直接存在比較關係)

二分搜索樹的簡單結構

BST.java

// 支持泛型,這個類型必須擁有可比較性
public class BST<E extends Comparable<E>> {
    // 對應的節點類
    private class Node {
        public E e;
        public Node left;
        public Node right;

        public Node(E e) {
            this.e = e;
            left = null;
            right = null;
        }
    }

    // 需要一個根節點
    private Node root;
    // 記錄二分搜索樹存儲多少個元素
    private int size;

    public BST() {
        root = null;
        size = 0;
    }

    // 當前存儲了多少個元素
    public int getSize() {
        return size;
    }

    // 查看當前二分搜索樹是否爲空
    public boolean isEmpty() {
        return size == 0;
    }
}

寫在最後

如果代碼有還沒有看懂的或者我寫錯的地方,歡迎評論,我們一起學習討論,共同進步。
推薦學習地址:
liuyubobobo老師的《玩轉數據結構》:https://coding.imooc.com/class/207.html
最後,祝自己早日鹹魚翻身,拿到心儀的Offer,衝呀!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章