LeetCode 98 驗證二叉搜尋樹

2021-10-05 19:04:22 字數 792 閱讀 4291

5.5日簽到題。難度中等題。(感覺算不上中等題的難度)

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

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

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

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

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

我的思路:我想到的有兩種解法:

1.形式上簡單,時間空間複雜度較高。用遞迴直接中序遍歷得到該二叉樹的排序,如果符合條件,那麼這個序列就是嚴格的遞增序列,否則不符合。非遞迴遍歷道理一樣,只是執行時間較短。

2.直接把根節點放入乙個linklist,判斷當前節點和其子節點的大小關係。情況有以下幾種:

a. 左孩子的左孩子(若存在) < 左孩子 

b.左孩子的的右孩子 >  左孩子 && 左孩子的右孩子 < 該節點 (若左的右不存在,則改為左和該比較)

c. 右孩子的左孩子  > 該節點 && 右孩子的左孩子 < 右孩子(若右的左不存在,則改為右和該比較)

d.右孩子的右孩子(若存在) > 右孩子

這幾個判斷我認為是比較麻煩的,所以我選擇的是第一種方法。

**如下:

linkedlistintlist = new linkedlist();

public void middle(treenode root)

public boolean isvalidbst(treenode root)

return true;

}

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 解題思路 中序遍歷遞增,每次只...

leetcode 98 驗證二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。乙個二叉搜尋樹具有如下特徵 示例 1 輸入 2 1 3 輸出 true示例 2 輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 如果對二叉搜尋樹不夠了解,可能...