牛客網《劍指Offer》(23)二叉線索樹的後序遍歷序列

題目描述

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

題目分析

線索二叉樹的特徵:左子樹小於根節點,右子樹大於根節點。

後序遍歷:左子樹、右子樹、根節點。

解題思路:

1、找到根節點所在索引位置,區分左右子樹。

2、判斷索引後的元素是否都大於更節點。

3、分別遞歸判斷左右子樹。

class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        int i_length = sequence.size();
        if(i_length <= 0)
            return false;
        return fun(sequence,0,i_length-1);
    }
    
    bool fun(vector<int> sequence,int begin,int end)
    {
        if(end - begin <= 1)
            return true;
        else
        {
            int i_current = begin;
            while(sequence[i_current] < sequence[end] && i_current < end)
            {
                i_current++;
            }
            
            for(int i = i_current;i<=end;i++)
            {
                if(sequence[i] < sequence[end])
                    return false;
            }
            return fun(sequence,begin,i_current-1)&&fun(sequence,i_current,end-1);
        }
    }
};

 

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