劍指 Offer 33 二叉搜尋樹的後序遍歷序列

2022-06-11 18:30:14 字數 880 閱讀 1186

1.最後乙個節點為根節點

2.左邊的節點全部要小於根,右邊的節點全部要大於根,因此陣列可以分成兩個區間,前半部分全部小於根,後半部分全部大於根

3.找到兩個區間的分割點,判斷是否兩個區間是否符合該性質

1

class

solution 78

return check(postorder, 0, postorder.size()-1);9

}101112

bool check(vector& postorder, int l, int

r) 23}24

25/*

右子樹大於根節點的值

*/26

for(int j = i+1; j < r; ++j)

3031

//遞迴檢查左右子樹是否滿足二叉搜尋樹的性質

32return check(postorder, l, i-1) && check(postorder, i, r-1

);33

}34 };

時間複雜度 o(n^2): 每次遞迴呼叫都減去乙個根節點,因此遞迴占用 o(n) ;最差情況下(即當樹退化為鍊錶),每輪遞迴都需遍歷樹所有節點,占用 o(n) 。

空間複雜度 o(n) : 最差情況下(即當樹退化為鍊錶),遞迴深度將達到 n 。

面試題33. 二叉搜尋樹的後序遍歷序列(遞迴分治 / 單調棧,清晰**)

遞迴和棧兩種方式解決,最好的擊敗了100%的使用者

劍指offer 33 二叉搜尋樹的後序遍歷

題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。思路 遞迴。最後乙個數字是樹的根節點,第一部分是左子樹節點的值,都比根節點小。第二部分是右子樹節點的值,都比根節點大。class solution de...

劍指Offer 33 二叉搜尋樹的後序遍歷

由於是後序遍歷,所以陣列最後乙個元素是根節點 遞迴開始傳入起始元素 和 末尾元素 當起始索引 left right 結束遞迴 執行迴圈,找到第乙個比根節點大的元素 temp 它的左面是樹的左子樹,右面到根節之間是樹的右子樹 判斷temp 到 root 之間的結點是否全部大於根節點 進行下一次遞迴,直...

劍指offer 33 二叉樹映象

操作給定的二叉樹,將其變換為源二叉樹的映象。二叉樹的映象定義 源二叉樹 8 6 10 5 7 9 11 映象二叉樹 8 10 6 11 9 7 5 複製 首先先理解題意,映象通過以下幾個步驟可以實現 可以看到首先對根節點的左右進行翻轉。再遞迴的對左子樹,以及右子樹進行翻轉。之前講過,鍊錶的題目分為四...