【劍指offer】判斷數組是否是二叉搜索樹的後序遍歷結果

輸入一個非空整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。

來源:劍指offer

知識點:

  • 後序遍歷:輸出順序爲左節點 - > 右節點 -> 根節點
  • 二叉搜索樹特性:左子樹中節點值均小於根節點,右子樹中節點值均大於根節點

簡要思路:取出根節點,然後遍歷數組,對數組中的值進行判斷

詳細思路:這題解法我覺得很好,判斷數組是否是某二叉搜索樹的後序遍歷的結果,根據後序遍歷的特性,給定數組的最後一個節點必定是根節點,數組中其他數據均是左子樹或右子樹中節點,我們要找到左子樹和右子樹的一個分界,分界左邊的節點值均小於根節點,也就是最後一個節點的值,界右邊的節點均大於根節點的值,也就是最後一個節點的值,去除最後一個根節點之後,對數組進行遍歷,如果前面有一個不滿足上述條件,則不是二叉搜索樹後序遍歷的結果

代碼:


public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        int size = sequence.length;
        if(size == 0) return false;
        int i = 0;
        while (--size != 0){
            while (sequence[i] < sequence[size]){
                i++;
            }
            // 此時已經找出了邊界,i 到 size爲右子樹中的節點
            while (sequence[i] > sequence[size]){
                i++;
            }
            if(i < size) return false;
            i = 0;
        }
        return true;
    }
}

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