ACWING46. 二叉搜索树的后序遍历序列(剑指offer)

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。

如果是则返回true,否则返回false。

假设输入的数组的任意两个数字都互不相同。

样例
输入:[4, 8, 6, 12, 16, 14, 10]

输出:true

思路:
二叉搜索书的特点是根节点值小于右子树值,大于左子树值。而后序遍历中最后一个节点为根节点,于是找到最后一个节点,然后确定左子树和右子树递归下去。

class Solution {
public:
    bool verifySequenceOfBST(vector<int> sequence) {
        int len = sequence.size();
        return dfs(sequence,0,len - 1);
    }

    bool dfs(vector<int> sequence,int l,int r) {
        if(l >= r) return true;
        int x = sequence[r];
        int pos = l;
        for(int i = l;i <= r;i++) {
            pos = i;
            if(sequence[i] > x) {
                break;
            }
        }
        for(int i = pos;i < r;i++) if(sequence[i] < x) return false;
        return dfs(sequence,l,pos - 1) && dfs(sequence,pos,r - 1);
    }
};
发布了844 篇原创文章 · 获赞 28 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/tomjobs/article/details/104941710