leetcode 98 驗證二叉搜尋樹

2021-08-21 08:55:38 字數 884 閱讀 5018

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

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

示例 1:

輸入:

2/ \

1 3

輸出: true

示例 2:

輸入:

5/ \

1 4

/ \3 6

輸出: false

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

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

如果對二叉搜尋樹不夠了解,可能會在思路上犯乙個錯誤:將current結點的值和左右孩子比較,如果滿足要求(即current結點的值大於左孩子,小於右孩子),就遞迴呼叫isvalidbst 驗證左右孩子為根結點的子樹。

這樣的驗證方式是不對的,因為二叉搜尋樹的要求是:current 結點值大於左子樹所有結點值,小於右子樹所有結點值。上面的驗證方式只能保證左右子樹的根結點滿足這種要求。

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

bool isvalidbst(treenode* root)

};

對二叉樹進行中序遍歷,ldr函式是中序遍歷的過程,將中序遍歷的結果儲存到陣列中,檢視是否是公升序,該方法時間複雜度nlogn,用到了額外的空間。

class solution 

private:

treenode* pre = null;

};

這個用到pre,儲存上一次遍歷的結點,不需要額外的空間。

leetcode 98 驗證二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。乙個二叉搜尋樹具有如下特徵 示例 1 輸入 1 3 輸出 true 示例 2 輸入 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 關鍵資訊 1二叉搜尋樹的中序遍歷是遞...

leetcode 98 驗證二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。乙個二叉搜尋樹具有如下特徵 示例 1 輸入 2 1 3 輸出 true示例 2 輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 解題思路 中序遍歷遞增,每次只...

leetcode98 驗證二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 示例 1 輸入 2 1 3 輸出 true示例 2 輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 解法1 可以利用它本身的性...