JAVA手寫二叉搜尋樹
阿新 • • 發佈:2021-02-08
二叉搜尋樹的概念
二叉查詢樹(Binary Search Tree),(又:二叉搜尋樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。二叉搜尋樹作為一種經典的資料結構,它既有連結串列的快速插入與刪除操作的特點,又有陣列快速查詢的優勢;所以應用十分廣泛,例如在檔案系統和資料庫系統一般會採用這種資料結構進行高效率的排序與檢索操作。
-來自百度百科
接下來我用視覺化操作給大家模擬一棵二叉搜尋樹的新增過程
第二個插入5
第三個插入8
第四個插入7
最後插入9
演示到這大家應該簡單的可以理解二叉搜尋樹是怎麼樣啦,總結一下他的特徵
- 節點的左子樹只包含小於當前根節點樹
- 節點的右子樹只包含大於當前根節點樹
- 所有左子樹右子樹也必須是二叉搜尋樹
那麼知道這個思路的話我們寫java程式碼就很好實現了
**
* @Description: 二叉搜尋樹
* @ClassName algorithm
* @Author: 王瑞文
* @Date: 2021/1/12 14:14
*/
public class BinarySearchTree {
/**
* 節點的元素值
*/
int data;
/**
* 左子樹
*/
BinarySearchTree left;
/**
* 右子樹
*/
BinarySearchTree right;
public BinarySearchTree(int data) {
this.data = data;
}
//根據二叉搜尋樹的特徵去插入
public void insert(BinarySearchTree root, int data) {
if (data > root.data) {//先寫右邊的新增
if (root.right == null) { //如果右邊為空說明可以新增
root.right = new BinarySearchTree(data);
} else {
insert(root.right, data);
}
} else {//左子樹新增(新增的節點data<根數的data)
if (root.left == null) { //如果左邊為空說明可以新增
root.left = new BinarySearchTree(data);
} else {
insert(root.left, data);
}
}
}
public void search(BinarySearchTree root) {
if (root != null) {
search(root.left);
System.out.println(root.data);
search(root.right);
}
}
public static void main(String[] args) {
int data[] = {6,5,8,7,9};
BinarySearchTree root = new BinarySearchTree(data[0]);
for (int i = 1; i < data.length; i++) {
root.insert(root, data[i]);
}
root.search(root);
}
}
main中的資料為測試資料,直接定死根為6。然後依次去插入5,8,7,9;
轉載請標明出處