二叉搜索树的后序遍历序列

来源:互联网 发布:淘宝助理导出宝贝详情 编辑:程序博客网 时间:2024/05/21 11:20

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

**题解:**BST的后序序列满足最后一个元素x是根,去掉最后一个元素可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。

递归实现(注意左右子树都有可能为空)

class Solution {public:    bool VerifySquenceOfBST(vector<int> sequence) {        if(sequence.size() == 0)    return false;        return verify(sequence, 0, sequence.size()-1);    }private:    bool verify(vector<int>& sequence, int left, int right){        if(right <= left)    return true;        int j = right-1;        //找出左子树的根节点        while(j >= left && sequence[j] > sequence[right]) j--;        //如果左子树中有大于根结点的,非法        for(int i = left; i < j; i++){            if(sequence[i] > sequence[right])    return false;        }        return verify(sequence, left, j) && verify(sequence, j+1, right-1);    }};
0 0
原创粉丝点击