程式設計 劍指offer 二叉搜尋樹的後序遍歷序列

2021-09-05 09:25:54 字數 1181 閱讀 2664

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

1. 二叉搜尋樹:左子樹永遠比右子樹小

2. 後序遍歷:最後訪問根節點

由上述兩點可知:後序遍歷序列的最後是根節點,可以將前面的部分分為比它小的左子樹和比它大的右子樹。

1、遞迴:

這道題很顯然我們可以用遞迴的方法來做:只要我們判斷當前序列的最後節點,可以將前面序列可以完全分解為左子樹序列和右子樹序列,並且這兩個序列也滿足這樣的條件,那個這個序列就是正確的。

1)找到序列的最後乙個元素a

2)判斷a能否將序列完全分解成左子樹序列和右子樹序列

i = 0;

while(seq[i]while(seq[i]>a)壓入右子樹;i++;

if(左子樹+右子樹=序列的長度 && 左子樹滿足條件 && 右子樹滿足條件)return true;

return false;

**:

這裡我採用的方法是用兩個vector陣列來儲存左子樹和右子樹,大家也可以採用記錄左右子樹開始和結束的索引的方法,將這兩個索引值作為函式引數傳入,這樣可以節省儲存空間。

class solution 

bool issquenceofbst(vectorsequence)

if(left.size()+right.size() == sequence.size()-1)

if(issquenceofbst(left) && issquenceofbst(right))

return true;

return false;

}};

2、非遞迴:

非遞迴其實也使用了類似的思想。

每個序列的最後乙個值一定是可以把前面的序列劃分為左右子樹的。

class solution 

while(sequence[size]if(i!=size)return false;

}return true;

} };

劍指offer 二叉樹 二叉樹搜尋樹

package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...

劍指offer 程式設計題 二叉搜尋樹的後序遍歷序列

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。思路 class solution public bool verifysquenceofbst vectora 非遞迴 非遞迴也是乙個基於遞迴的思想 左子樹一定...

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

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。author zy date 2017年10月13日 下午9 34 21 decription 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如...