如何在Java中實現二叉搜尋樹( binary search tree)?
二叉搜尋樹或BST是一種流行的資料結構,用於保持元素的順序。二叉搜尋樹是二叉樹,其中左子節點的值小於或等於父節點,右子節點的值大於或等於父節點。由於它是二叉樹,它只能有0,1或2個子節點。二叉搜尋樹之所以與眾不同,是因為它能夠減少諸如新增、刪除和搜尋(也稱為插入、刪除和查詢)等基本操作的時間複雜性。在BST中,所有這些操作(插入,刪除和查詢)都可以在O(log(n))時間內執行。這種速度提高的原因是由於二叉搜尋樹的獨特屬性,對於每個節點,左子節點中的資料小於(或等於),右子節點中的資料大於(或等於)到所述節點中的資料。
在程式設計面試中,您將看到許多基於二叉搜尋樹的資料結構和演算法問題,例如:檢查二叉樹是否是BST?或者,編寫一個程式來檢查BST是否平衡。為了解決這個問題,您必須知道如何在Java中實現BST。
在這,我將教您如何在Java中實現二叉搜尋樹,您可以使用它來解決任何二叉搜尋樹或基於二叉樹的編碼問題。
Java中的二叉搜尋樹
在這裡,您將學習如何建立具有整數節點的二叉搜尋樹。我使用泛型不僅僅是為了使程式碼簡單,如果您願意,可以將問題擴充套件到使用泛型,這將允許您建立一個字串、整數、浮點或雙精度的二叉樹。記住,確保BST的節點必須實現Comparable介面。這是許多Java程式設計師在嘗試使用泛型實現二叉搜尋樹時容易忘記的。
這裡是Java中的二叉搜尋樹的實現。這只是一個結構,我們隨後將新增方法在二叉搜尋樹中新增節點,從二叉搜尋樹中刪除節點,並在後續部分中從BST中查詢節點。
在這個實現中,我建立了一個Node類,它類似於我們的連結串列節點類,在向您展示如何在Java中實現連結串列時建立的。它有一個資料元素,一個整數和一個Node引用,指向二叉樹中的另一個節點。
我還建立了四個基本功能,如下所示:
getRoot(), 返回二叉樹的根
isEmpty(), 用於檢查二叉搜尋樹是否為空
size(), 查詢BST中的節點總數
clear(), 清除BST
以下是使用Java建立二叉搜尋樹或BST的示例程式碼,不使用任何第三方庫。
import java.util.Stack; /** * Java Program to implement a binary search tree. A binary search tree is a * sorted binary tree, where value of a node is greater than or equal to its * left the child and less than or equal to its right child. * * @author WINDOWS 8 * */ public class BST { private static class Node { private int data; private Node left, right; public Node(int value) { data = value; left = right = null; } } private Node root; public BST() { root = null; } public Node getRoot() { return root; } /** * Java function to check if binary tree is empty or not * Time Complexity of this solution is constant O(1) for * best, average and worst case. * * @return true if binary search tree is empty */ public boolean isEmpty() { return null == root; } /** * Java function to return number of nodes in this binary search tree. * Time complexity of this method is O(n) * @return size of this binary search tree */ public int size() { Node current = root; int size = 0; Stack<Node> stack = new Stack<Node>(); while (!stack.isEmpty() || current != null) { if (current != null) { stack.push(current); current = current.left; } else { size++; current = stack.pop(); current = current.right; } } return size; } /** * Java function to clear the binary search tree. * Time complexity of this method is O(1) */ public void clear() { root = null; } } |
相關文章
- 二叉搜尋樹(Binary Search Tree)(Java實現)Java
- 二叉搜尋樹(Binary Search Tree )的定義及分析
- 如何在 Java 中實現二叉搜尋樹Java
- 【LeetCode 235_二叉搜尋樹】Lowest Common Ancestor of a Binary Search TreeLeetCode
- 96-Unique Binary Search Trees 二叉搜尋樹的數量
- PAT 1043 Is It a Binary Search Tree (25分) 由前序遍歷得到二叉搜尋樹的後序遍歷
- javascript實現二叉搜尋樹JavaScript
- Java實現二叉搜尋樹的插入、刪除Java
- js實現完全排序二叉樹、二叉搜尋樹JS排序二叉樹
- 資料結構之二叉搜尋樹—Java實現資料結構Java
- JavaScript 二叉搜尋樹以及實現翻轉二叉樹JavaScript二叉樹
- 二叉搜尋樹的python實現Python
- 二叉搜尋樹演算法詳解與Java實現演算法Java
- Recover Binary Search Tree leetcode javaLeetCodeJava
- 實現二叉搜尋樹的新增,查詢和刪除(JAVA)Java
- 二叉搜尋樹
- Validate Binary Search Tree leetcode javaLeetCodeJava
- Maximum Depth of Binary Tree 二叉樹的深度二叉樹
- [CareerCup] 4.1 Balanced Binary Tree 平衡二叉樹二叉樹
- 資料結構-二叉搜尋樹的實現資料結構
- 二叉樹的插入和搜尋–python實現二叉樹Python
- [CareerCup] 4.7 Lowest Common Ancestor of a Binary Search Tree 二叉樹的最小共同父節點二叉樹
- Day20 | 654.最大二叉樹 、 617.合併二叉樹 、 700.二叉搜尋樹中的搜尋 98.驗證二叉搜尋樹二叉樹
- 173. Binary Search Tree Iterator
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- LintCode-Search Range in Binary Search Tree
- 看動畫學演算法之:平衡二叉搜尋樹AVL Tree動畫演算法
- Leetcode 700. 二叉搜尋樹中的搜尋(DAY 2)LeetCode
- Convert Sorted List to Binary Search Tree leetcode javaLeetCodeJava
- Convert Sorted Array to Binary Search Tree leetcode javaLeetCodeJava
- 資料結構高階--二叉搜尋樹(原理+實現)資料結構
- leetcode 700. 二叉搜尋樹中的搜尋 思考分析LeetCode
- Java中在二叉搜尋樹中查詢節點的父節點Java
- Leetcode226.翻轉二叉樹 Invert Binary Tree(Java)LeetCode二叉樹Java
- Python資料結構——二叉搜尋樹的實現(上)Python資料結構
- 二叉搜尋樹的操作集
- 有序表和搜尋二叉樹二叉樹
- 二叉搜尋樹的結構