驗證二叉搜尋樹難度中等513
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。
假設乙個二叉搜尋樹具有如下特徵:
示例 1:
示例 2:輸入:
2/ \
1 3
輸出: true
輸入:
5/ \
1 4
/ \3 6
輸出: false
解釋: 輸入為: [5,1,4,null,null,3,6]。
根節點的值為 5 ,但是其右子節點值為 4 。
//inoder 遍歷的結果就是乙個有序的對於bst來說,
//因此 我們借助stack 左一次inorder 記錄每一次的當前值和下乙個值比較
//因此 先迭代左子節點 在迭代右子節點
//time : o(n) 每乙個節點有且僅被訪問一次
//space : o(n) 借助乙個stack結構儲存節點。
public
boolean
isvalidbst
(treenode root)
root = stack.
pop();
if(root.val <= minvalue)
return
false
;//如果小於最小值 非bst
minvalue = root.val;
root = root.right;
//遞迴右子節點
}return
true
;}
time:o(n)
//遞迴
//主要思路 就是通過遞迴查詢根節點的左子樹的最大值是否大於根節點
//或者根節點的右子樹的最小值是否小於根節點。
public
boolean
isvalidbst
(treenode root)
public
boolean
isvalid
(treenode root,integer min,integer max)
每日一題 LeetCode
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...
LeetCode每日一題(題1028)
最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...
LeetCode每日一題(題139)
題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...