国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LeetCode98:驗證二叉搜索樹,居然有這么簡單的中等難度,白撿(用時擊敗100%)

這篇具有很好參考價值的文章主要介紹了LeetCode98:驗證二叉搜索樹,居然有這么簡單的中等難度,白撿(用時擊敗100%)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

歡迎訪問我的GitHub

這里分類和匯總了欣宸的全部原創(chuàng)(含配套源碼):https://github.com/zq2599/blog_demos

關于LeetCode98

  • 做這道題之前,我反復審題,最后確認:沒錯,不存在什么坑,這道題確實非常非常簡單,然而卻被官方定義為中等難度
  • 這一定是送分,白撿一道中等難度題,接下來,一起來輕松愉快的享受解題過程吧

關于題目

  • 題目:98. 驗證二叉搜索樹
  • 描述
給你一個二叉樹的根節(jié)點 root ,判斷其是否是一個有效的二叉搜索樹。

有效 二叉搜索樹定義如下:

節(jié)點的左子樹只包含 小于 當前節(jié)點的數(shù)。
節(jié)點的右子樹只包含 大于 當前節(jié)點的數(shù)。
所有左子樹和右子樹自身必須也是二叉搜索樹
  • 示例 1:
    LeetCode98:驗證二叉搜索樹,居然有這么簡單的中等難度,白撿(用時擊敗100%)
輸入:root = [2,1,3]
輸出:true
  • 示例2:
    LeetCode98:驗證二叉搜索樹,居然有這么簡單的中等難度,白撿(用時擊敗100%)
輸入:root = [5,1,4,null,null,3,6]
輸出:false
解釋:根節(jié)點的值是 5 ,但是右子節(jié)點的值是 4 。
  • 提示:
樹中節(jié)點數(shù)目范圍在[1, 104] 內
-231 <= Node.val <= 231 - 1

分析

  • 簡單的說,此題的要求如下圖所示:紅色節(jié)點的值都小于100,藍色節(jié)點的值都大于100,然后,往每個子節(jié)點上套這個規(guī)則即可
    LeetCode98:驗證二叉搜索樹,居然有這么簡單的中等難度,白撿(用時擊敗100%)
  • 此題有兩處需要注意:
  1. 對于任意節(jié)點,它的左子樹都要小于節(jié)點值,右子樹必須大于節(jié)點值,不允許等于,一旦出現(xiàn)就返回false
  2. 節(jié)點值的范圍:下限是int的最小值,上限是int的最大值
  • 只要注意以上兩點,就能憑借最基礎的二叉樹遍歷基本功解題了

解題思路

  • 還是以下圖來說明
    LeetCode98:驗證二叉搜索樹,居然有這么簡單的中等難度,白撿(用時擊敗100%)
  • 上圖中,不論紅色還是藍色節(jié)點,都可以設置好一個范圍區(qū)間,然后檢查這些節(jié)點在不在區(qū)間內,這就是解題思路
  • 其實就是中規(guī)中矩的前序遍歷(口訣:根左右),每個節(jié)點都是先檢查自己在不在規(guī)定范圍內,然后再處理其左子樹和右子樹,在處理的時候,要重新設定范圍,對左子樹,要更新上限,對右子樹,要更新下限
  • 上圖中,對紅色節(jié)點的要求是小于100,也就是說上限是100,至于下限?無所謂,那就用int的最小值-2147483648作為下限?
  • 絕對不行!??!因為:節(jié)點值可能就是int的最小值!
  • 同理,處理藍色節(jié)點的時候,也不能用int型的最大值2147483647作為上限
  • 要用long型的最小值作為紅色的下限,long型的最大值作為上限
  • 分析完成,接下來開始編碼

編碼

  • 完整代碼如下,唯一要注意的就是默認上限是Long.MAX_VALUE,默認下限是Long.MIN_VALUE:
class Solution {
    public boolean isValidBST(TreeNode root) {

        // 左子樹,只要求不能比自己大,至于小到什么程度都無所謂,所以用int最小值作為左側邊界
        if (!isValidBST(root.left, Long.MIN_VALUE, root.val)) {
            return false;
        }

        // 右子樹,只要求不能比自己小,至于達到什么程度都無所謂,所以用int最大值作為右側邊界
        if (!isValidBST(root.right, root.val, Long.MAX_VALUE)) {
            return false;
        }

        return true;
    }

    public boolean isValidBST(TreeNode root, long min, long max) {
        if (null==root) {
            return true;
        }

        // 檢查自己
        // 注意審題:左側必須比自己小,不接受等于,右側必須必自己大,不接受等于
        if (root.val<=min || root.val>=max) {
            return false;
        }

        // 左子樹,只要求不能比自己大,至于小到什么程度都無所謂,所以用入?yún)⒌淖钚≈底鳛樽髠冗吔?        if (!isValidBST(root.left, min, Math.min(max, root.val))) {
            return false;
        }

        // 右子樹,只要求不能比自己小,至于達到什么程度都無所謂,所以用入?yún)⒌淖畲笾底鳛橛覀冗吔?        if (!isValidBST(root.right, Math.max(min, root.val), max)) {
            return false;
        }

        return true;
    }
}
  • 提交,順利AC,用時擊敗100%
    LeetCode98:驗證二叉搜索樹,居然有這么簡單的中等難度,白撿(用時擊敗100%)
  • 至此,解題完成,至今也沒弄明白,一個二叉樹遍歷基本功考核,怎么就成了中級難度

歡迎關注博客園:程序員欣宸

學習路上,你不孤單,欣宸原創(chuàng)一路相伴...文章來源地址http://www.zghlxwxcb.cn/news/detail-707521.html

到了這里,關于LeetCode98:驗證二叉搜索樹,居然有這么簡單的中等難度,白撿(用時擊敗100%)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • leetcode每日一練-第98題- 驗證二叉搜索樹

    leetcode每日一練-第98題- 驗證二叉搜索樹

    ? ? 一、思路 因為要驗證多個節(jié)點是否是二叉搜索樹,因此使用 遞歸 二、解題方法 設計一個遞歸函數(shù) helper(root, lower, upper) 來遞歸判斷,函數(shù)表示考慮以 root 為根的子樹,判斷子樹中所有節(jié)點的值是否都在 (l,r)的范圍內(注意是開區(qū)間)。如果 root 節(jié)點的值 val 不在 (l,r)的范

    2024年02月15日
    瀏覽(20)
  • 數(shù)據(jù)結構與算法之二叉樹: Leetcode 98. 驗證二叉搜索樹 (Typescript版)

    驗證二叉搜索樹 https://leetcode.cn/problems/validate-binary-search-tree/ 描述 給你一個二叉樹的根節(jié)點 root ,判斷其是否是一個有效的二叉搜索樹 有效 二叉搜索樹定義如下: 節(jié)點的左子樹只包含 小于 當前節(jié)點的數(shù)。 節(jié)點的右子樹只包含 大于 當前節(jié)點的數(shù)。 所有左子樹和右子樹自身

    2024年02月16日
    瀏覽(22)
  • 算法訓練day20Leetcode654最大二叉樹617合并二叉樹700二叉樹中的1搜索98驗證二叉搜索樹

    https://leetcode.cn/problems/maximum-binary-tree/description/ 中序遍歷遞歸,找到最大值然后作為根節(jié)點 凡是構造二叉樹的題目都用前序遍歷 (中左右) 為先構造中間節(jié)點,然后遞歸構造左子樹和右子樹。 確定遞歸函數(shù)的參數(shù)和返回值 參數(shù)傳入的是存放元素的數(shù)組,返回該數(shù)組構造的二

    2024年01月21日
    瀏覽(26)
  • 【算法刷題day20】Leetcode:654. 最大二叉樹、617.合并二叉樹、700. 二叉搜索樹中的搜索、98.驗證二叉搜索樹

    草稿圖網(wǎng)站 java的Deque 題目: 654. 最大二叉樹 解析: 代碼隨想錄解析 解題思路 NLR的建樹 代碼 總結 暫無 題目: 617.合并二叉樹 解析: 代碼隨想錄解析 解題思路 如果都為root1, root2都為空,返回null;如果root1為空,root2不為空,返回root2;如果roo1不為空,root2為空,返回root

    2024年04月10日
    瀏覽(26)
  • 98. 驗證二叉搜索樹

    98. 驗證二叉搜索樹

    98. 驗證二叉搜索樹 https://leetcode.cn/problems/validate-binary-search-tree/ //保證按照規(guī)則來,往左邊走就要,不能比當前值還大了;往右邊走就要,不能比當前值還小了;

    2024年02月16日
    瀏覽(18)
  • 力扣 98. 驗證二叉搜索樹

    力扣 98. 驗證二叉搜索樹

    題目來源:https://leetcode.cn/problems/validate-binary-search-tree/description/ ? ?C++題解1:中序遍歷,遞歸法。獲取數(shù)組,如果是遞增則返回true,否則返回false。 C++題解2:中序遍歷,遞歸法。不斷更新最大值,初始化為最左最下層的節(jié)點值,按照中序遍歷可以更新為上一節(jié)點的值。 C+

    2024年02月12日
    瀏覽(16)
  • LeetCode_二叉搜索樹_中等_236.二叉搜索樹的最近公共祖先

    LeetCode_二叉搜索樹_中等_236.二叉搜索樹的最近公共祖先

    給定一個二叉搜索樹, 找到該樹中兩個指定節(jié)點的最近公共祖先。 百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個結點 p、q,最近公共祖先表示為一個結點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節(jié)點也可以是它自己的祖先)?!?例如,給定如下二叉搜

    2023年04月10日
    瀏覽(18)
  • 【LeetCode-中等題】230. 二叉搜索樹中第K小的元素

    【LeetCode-中等題】230. 二叉搜索樹中第K小的元素

    該題最大的特點就是這個樹是二叉樹: 所以, 中序遍歷對二叉樹的遍歷本身就是有序的 思想很簡單,就是通過層序遍歷將節(jié)點都加到List集合中,然后調用 Collections.sort(list)排序后 ,找第k小的數(shù) list.get(k-1) 二叉樹中序遍歷得到的值序列是遞增有序的 借助一個list集合來接收有

    2024年02月10日
    瀏覽(50)
  • 【LeetCode-中等】劍指 Offer 36. 二叉搜索樹與雙向鏈表

    劍指 Offer 36. 二叉搜索樹與雙向鏈表 后序遍歷、二叉搜索樹 二叉搜索樹中的任一節(jié)點的 直接前驅為其左子樹的最右側節(jié)點,直接后繼為其右子樹的最左側節(jié)點 。因此,可以通過這個關系來操作原來的二叉樹。 為了不影響深度較大的節(jié)點的判斷,使用后序遍歷。 Step1. 后序遍

    2024年02月13日
    瀏覽(20)
  • LeetCode刷題--- 驗證二叉搜索樹

    LeetCode刷題--- 驗證二叉搜索樹

    個人主頁:元清加油_【C++】,【C語言】,【數(shù)據(jù)結構與算法】-CSDN博客 個人專欄:力扣遞歸算法題? ? ? ? ? ? ? ? ? ? 【C++】?? 前言:這個專欄主要講述遞歸遞歸、搜索與回溯算法,所以下面題目主要也是這些算法做的 ? 我講述題目會把講解部分分為3個部分: 1、題目解析

    2024年02月04日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包