輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。二叉搜尋樹就是這個二叉樹的左子樹的所有節點都比根節點小,右子樹的所有節點都比根節點大。我們知道後序遍歷的最後乙個節點一定是根節點,因此根據根節點和二叉搜尋樹的大小關係,可以將序列從頭開始和根節點比較,小的就是左子樹,大的就是右子樹。依次做下去,就能判斷出是否是二叉搜尋樹。
bool verifysquenceofbst
(vector<
int> sequence)
bool post_array
(vector<
int> a,
int start,
int end)
//與左子樹相同,找到右子樹
for(j = i; j < end; j++)if
(a[j]
< a[end]
)break
;//如果右子樹裡面有比根節點小的,說明不是平衡樹
if(j != end)
return false;
//這裡必須初始化為true,否則在不執行下面其中之一的判斷是,會導致程式錯誤
bool left = true,right = true;
//對找到的左子樹和右子樹遞迴查詢
if(i>start)
//這裡我一開始弄成了start+i-1,後來發現i是以start開始的
left =
post_array
(a,start,i-1)
;if(i < end)
right =
post_array
(a,i,end-1)
;return left && right;
}
劍指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 複製 首先先理解題意,映象通過以下幾個步驟可以實現 可以看到首先對根節點的左右進行翻轉。再遞迴的對左子樹,以及右子樹進行翻轉。之前講過,鍊錶的題目分為四...