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

2021-10-20 10:48:12 字數 844 閱讀 6217

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

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷結果。如果是則返回 true,否則返回 false。假設輸入的陣列的任意兩個數字都互不相同。

5/ \

2   6

/ \1   3

示例 1:

輸入: [1,6,3,2,5]

輸出: false

示例 2:

輸入: [1,3,2,6,5]

輸出: true

陣列長度 <= 1000

二叉搜尋樹本身的定義就有巢狀遞迴的意思,所以會想到用遞迴去檢查是否符合條件

其次要知道後序遍歷的陣列排列的特點如下

之前的遞迴操作往往是對樹結構的鍊錶操作,而這次是對乙個陣列操作,判斷他是否屬於樹形結構。而後序遍歷在便歷的陣列裡左子樹右子樹根節點的鮮明分布

讓其很容易判斷,這需要對後序遍歷的陣列排列的特點有非常清楚的理解。而對於二叉搜尋樹,要用遞迴的方法判斷每個節點的左子樹是否小於他,右子樹是否大於他。

二叉搜尋樹在定義上需要左右子樹來證明,而後序遍歷的陣列排列左子樹右子樹根節點的鮮明分布,所以這兩個很容易組合在一起

class solution 

boolean recur( int postorder,int i, int j) {//不要忘記傳進陣列

if(i >= j) return true;

int m=i;

while(postorder[m]思路總結:

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