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

2021-10-12 17:43:52 字數 1102 閱讀 7062

先看一眼題:

思路:二叉搜尋樹:左小右大

後序遍歷:左右中

逆後序遍歷:中右左

結論:逆後序遍歷的第乙個數是整個樹的根節點

·對於每個根節點,第乙個比它大的數是其右節點 右子樹範圍為(左根節點,右根節點)

·對於每個根節點,第乙個比他小的數是其左節點 左子樹範圍為(0,左根節點)

·左根節點必須在右根節點的前面

·每一次遞迴的時候根節點都應比左子樹的所有元素要大

-只需判斷每個子樹是否遞迴的滿足該結論

**如下:

public

boolean

verifypostorder

(int

postorder)

public

boolean

verify

(int

post)

//尋找左節點

for(left = post.length -

2; left >=

0; left--)if

(right >=

0&& left >=

0&& left > right)

return

false

;boolean l =

true

, r =

true

;//遞迴右子樹

int count =0;

if(right >=0)

r =verify

(p);}}

//遞迴左子樹

if(left >=0)

//根節點應該比左子樹的全部元素都要大

for(

int i =

0; i < p.length; i++

) l =

verify

(p);}}

//如果左右子樹都滿足條件,則返回true,有任乙個不符合條件,則返回false

return l && r;

}

劍指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 複製 首先先理解題意,映象通過以下幾個步驟可以實現 可以看到首先對根節點的左右進行翻轉。再遞迴的對左子樹,以及右子樹進行翻轉。之前講過,鍊錶的題目分為四...