二叉搜索樹的後序遍歷序列
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
解題思路
二叉搜索樹:左子樹的元素是都小於根元素,右子樹都大於根元素
後序遍歷:首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點,所以數組最後一個元素是根元素。
從前面開始遍歷,小於的當前根元素的值是左子樹的,當找到第一個大於當前根元素的值,可以確定後半段的元素都應是在當前節點的右子樹
如果後半段(右子樹)裏面有小於根元素的值的元素,就說明這個不是二叉搜索樹的後序遍歷。最後循環校驗每個子樹是否也滿足二叉搜索樹的後序遍歷即可。
func helper(sequence []int, start, end int) bool { if start > end { return true } var i int for i = start; i < end; i++ { if sequence[i] > sequence[end] { break } } for j := i; j < end; j++ { if sequence[j] < sequence[end] { return false } } return helper(sequence, start, i - 1) && helper(sequence, i, end - 1) } func VerifySquenceOfBST( sequence []int ) bool { if len(sequence) == 0 { return false } return helper(sequence, 0, len(sequence) - 1) }