二叉搜索樹(BST),首先它是個二叉樹。
做題之前看了下以前的筆記:
- 【樹與二叉樹】:https://www.cnblogs.com/pingguo-softwaretesting/p/14587752.html
- 【二叉樹的遍歷,前序、中序和後序】:https://www.cnblogs.com/pingguo-softwaretesting/p/14615248.html
二叉樹(BST)簡介
二叉搜索樹,又有如下特徵:
- 左子樹所有節點的元素值均小於根的元素值
- 右子樹所有節點的元素值均大於根的元素值
如圖所示,圖中任何一個節點(比如 4),左邊都比它小,右邊都比它大。而且任一節點的左右子樹仍然是 BST。
題目描述
難度:【簡單】
標籤:【二叉樹】
給定二叉搜索樹(BST)的根節點和一個值。 你需要在BST中找到節點值等於給定值的節點。
返回以該節點爲根的子樹。 如果節點不存在,則返回 NULL。
題目地址:https://leetcode-cn.com/problems/search-in-a-binary-search-tree/
示例
給定二叉搜索樹:
4
/ \
2 7
/ \
1 3
和值: 2
你應該返回如下子樹:
2
/ \
1 3
如果要找的值是 5,但因爲沒有節點值爲 5,我們應該返回 NULL。
題目大意
就是給一個二叉搜索樹,還給了一個目標值,你要從樹裏找到一個節點的值是等於目標值的,有就返回這個節點的樹。
全找完沒有,就返回 null。
解題
找節點就是要遍歷二叉樹的,然後拿這個節點的值與目標值比較,那正常有3種情況:
- 節點值 == 目標值:直接返回這個節點。
- 節點值 < 目標值:根據 BST 的特性,說明左邊的樹不可能再存在目標值了,應該去右子樹中繼續尋找。
- 節點值 > 目標值:根據 BST 的特性,說明右邊的樹不可能再存在目標值了,應該去左子樹中繼續尋找。
另外異常情況,考慮一個當傳入的節點爲空,直接返回 null。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if (root == null) {
return null;
}
if (root.val < val) {
// 比目標值小,應該去右子樹中繼續尋找
return searchBST(root.right, val);
}
if (root.val > val) {
// 比目標值小,應該去左子樹中繼續尋找
return searchBST(root.left, val);
}
return root;
}
}