LeetCode 0098 驗證二叉搜尋樹

2021-10-13 09:39:05 字數 2285 閱讀 2877

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。

假設乙個二叉搜尋樹具有如下特徵:

節點的左子樹只包含小於當前節點的數。

節點的右子樹只包含大於當前節點的數。

所有左子樹和右子樹自身必須也是二叉搜尋樹。

輸入:

2/ \

1 3

輸出: true

輸入:

5/ \

1 4

/ \3 6

輸出: false

解釋: 輸入為: [5,1,4,null,null,3,6]。

根節點的值為 5 ,但是其右子節點值為 4 。

/**

* 0098-驗證二叉搜尋樹

* 給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。

* * 假設乙個二叉搜尋樹具有如下特徵:

* * 節點的左子樹只包含小於當前節點的數。

* 節點的右子樹只包含大於當前節點的數。

* 所有左子樹和右子樹自身必須也是二叉搜尋樹。

* * 示例 1:

* * 輸入:

* 2* / \

* 1 3

* 輸出: true

* * 示例 2:

* * 輸入:

* 5* / \

* 1 4

* / \

* 3 6

* 輸出: false

* 解釋: 輸入為: [5,1,4,null,null,3,6]。

* 根節點的值為 5 ,但是其右子節點值為 4 。

*//**

* definition for a binary tree node.

*/class

treenode

treenode

(int val)

treenode

(int val, treenode left, treenode right)

}/**

* 思路:

* 如果該二叉樹的左子樹不為空,則左子樹上所有節點的值均小於它根節點的值,若它的右子樹不為空,則右子樹

* 上的所有節點君大於它的根節點的值,它的左右子樹也為二叉搜尋樹。

* * 設計乙個遞迴函式 helper(root, lower, upper) 來遞迴判斷,函式表示考慮root為根的子樹,判斷

* 子樹中所有節點的值是否都在 (l,r)的範圍呢你(開區間)。如果root 節點的值val 不在範圍內說明不

* 滿足條件直接返回,否則繼續遞迴呼叫檢查它的左右子樹是否滿足,如果都滿足才說明是一棵二叉搜尋樹。

* * 根據二叉搜尋樹的性質,在遞迴呼叫左子樹時,我們需要把上界 upper 改為 root.val,

* 即呼叫 helper(root.left, lower, root.val),因為左子樹里所有節點的值均小於它的根節點的值。

* 同理遞迴呼叫右子樹時,我們需要把下界 lower 改為 root.val,

* 即呼叫 helper(root.right, root.val, upper)。

* * 函式遞迴呼叫的入口為 helper(root, -inf, +inf), inf 表示乙個無窮大的值。

*/class

solution

/** * 遞迴呼叫判斷

** @param root

* @param lower

* @param upper

* @return

*/private

boolean

helper

(treenode root, integer lower, integer upper)

int val = root.val;

if(lower != null && val <= lower)

if(upper != null && val >= upper)if(

!helper

(root.left, lower, val))if

(!helper

(root.right, val, upper)

)return

true;}

}/**

* 測試

leetcode 驗證二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 示例 1 輸入 2 1 3輸出 true 示例 2 輸入 5 1 4 3 6輸出 false解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 需要注意的是,左 右子樹 是指...

LeetCode 驗證二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true 示例 2 輸入 5 1 4 3 6 輸出 false 解釋 ...

驗證二叉搜尋樹(leetcode)

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。1.遞迴 2020.5.5 9 09 definition for a binary tree node...