二叉搜索树的后序序列

你快乐吗?

Posted by bbkgl on September 26, 2019

二叉搜索树的后序序列

C++,后序序列的规律。

后序序列的组成一定是[左子树,右子树,根结点],再根据BST的规律,左 < 根 < 右,

就可以先找出左子树序列,右子树序列,根结点其实就是最后的结点。如果是合法的后序序列的话,必然满足所有左子树序列都小于根结点,所有右子树序列都大于根结点。

根据如上规律,可以递归每棵子树的序列,然后检查子树是否符合后序序列规律。

所以代码如下:

class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        if (sequence.empty()) return false;
        return dfs(sequence, 0, sequence.size() - 1);
    }
    
    bool dfs(vector<int> &v, int left, int right) {
        if (left + 1 >= right) return true;
        int left_right = right - 1;
        for (; left_right >= left; left_right--) 
            if (v[left_right] < v[right])
                break;
        for (int i = left_right - 1; i >= left; i--) 
            if (v[i] > v[right])
                return false;
        return dfs(v, left, left_right) && dfs(v, left_right + 1, right - 1);
    }
};