首先了解二叉樹
和鏈表一樣,是動態數據結構
(在創建這種數據結構時不需要考慮容基)- 每一個元素存在節點中,除了元素之外,還有兩個指向其他節點的引用,分別叫做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,衝呀!