輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。
一棵 bst :左孩子 < 根結點 < 右孩子
一棵 bst 的左子樹或者右子樹都是 bst
後序遍歷是,左右根:[3, 4, 9, 5, 12, 11, 10],結合圖再從左往右分析後序序列,分析子樹,可以發現:
樹區間的最後乙個數是樹的根節點
第乙個大於根節點的樹區分左右子樹
所以只要找到第乙個大於根節點的樹
劃分左右子樹
再判斷一下右子樹中的樹是否都大於根節點
再縮短區間 遞迴每一棵子樹 保證每一棵樹都是符合這樣的規律即可
public
class
solution
//此時已經保證了i前面的數都是小於根節點的 再判斷一下右子樹中是否存在小於根節點的
for(
int j = i ; j < end; j++
)//遞迴判斷左子樹 右子樹是否同樣滿足 左子樹《根節點《右子樹
return
helpverify
(sequence,start,i-1)
&&helpverify
(sequence,i,end-1)
;}public
boolean
verifysquenceofbst
(int
sequence)
}
Tree 二叉搜尋樹
每個節點最多兩個子節點,其中左邊節點的值小於該節點的值,右邊節點的值大於該節點的值。為了簡便起見,該二叉樹裝入的資料為整數,且不允許有重複的關鍵字值。程式設計中為了簡便,採用了遞迴演算法,運算時會帶來額外的開銷,如果能將相應的演算法替換為迭代,則更為有效。刪除的演算法相應複雜一些,但也可以承受。ap...
二叉搜尋樹的後序遍歷
二叉搜尋樹的後序遍歷序列中,最後乙個值是根結點,前面比根節點小的是左結點,後面比根結點大的是右結點。include include bool verifysquenceofbst int sequence,int length int root sequence length 1 int i 0 在...
二叉搜尋樹的後序遍歷
描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷。如果是,則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。1 樣例輸入 5 7 6 9 11 10 8 1 樣例輸出 yes 2 樣例輸入 7 4 6 5 2 樣例輸出 no 首先要知道二叉搜尋樹的定義 或者是一棵空樹...