劍指offer之二叉搜索樹的後序遍歷

  1. 二叉搜索樹
    二叉搜索樹又名二叉查找樹、二叉排序樹,見名知意,它是一顆有序的樹。分爲兩種狀態:
    1. 該樹是一棵空樹
    2. 該樹符合以下定義:
      如果有左子樹,則所有的左子樹結點的值都比根結點小;如果有右子樹,則所有右子樹結點的值都比根結點大。所有的左右子樹都符合上述規律。
  2. 思考該題
    1. 題目
      輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
    2. 思路
      由上述可以知道,對於一顆二叉搜索樹而言,利用後序遍歷會讓整個數組分爲兩部分:前面部分爲左子樹,其所有值都比根結點(即是數組最後一個數值)小;後半部分爲右子樹,其所有值都比根結點大。並且,該特性在子樹中也適用。
      所以,我們可以利用該特性去解決該問題。
      圖示上述特性:
      字醜,莫怪
    3. 代碼結果:
      在這裏插入圖片描述
    4. 代碼:
    public class Solution {
        public boolean VerifySquenceOfBST(int [] sequence) {
            if(sequence.length == 0) return false;
            return VerifySequenceOfBST(sequence, 0, sequence.length - 1);
        }
        public boolean VerifySequenceOfBST(int[] sequence, int begin, int end){
            if(end - begin == 0) return true;
            for(int i =0;i<end ;i++){
                if(sequence[i] < sequence[end]){
                    continue;
                }
                for(int j=i+1;j<end;j++){
                    if(sequence[j] < sequence[end]){
                        return false;
                    }
                }
                return VerifySequenceOfBST(sequence, begin, i) && VerifySequenceOfBST(sequence, i+1, end-1);
                //因爲上面已經把根結點比較過了,所以捨棄了根結點(即是最後一個點)
            }
            return true;
        }
    }
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章