JZ23 二叉搜索樹的後序遍歷序列

二叉搜索樹的後序遍歷序列

輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出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)
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章