【LeetCode】700. 二叉搜索樹中的搜索

二叉搜索樹(BST),首先它是個二叉樹。

做題之前看了下以前的筆記:

二叉樹(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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章