【剑指Offer】【树】二叉搜索树的后序遍历序列

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

A:在二叉树的后序遍历中,数组最后一个元素为根节点,左子树序列始终小于根节点,右子树序列始终大于根节点

  找左子树序列和右子树序列

  递归调用查找即可,若不满足条件返回false,若最后left大于right返回true

class Solution {
public:
    bool isBST(vector<int> sequence, int left, int right)
    {
        if(left >= right) //left==right对应的是叶子结点,left>right对应空树
        {
            return true;
        }
        int check_right = right;
        //找右子树,tmp为右子树最左分界点
        while((check_right > left) && (sequence[check_right - 1] > sequence[right]) )
        {
            --check_right;
        }
        //找左子树
        for(int check_left = check_right - 1; check_left >= left; --check_left)
        {
            if(sequence[check_left] > sequence[right])
            {
                return false;
            }
        }
        return (isBST(sequence, left, check_right - 1) && isBST(sequence, check_right, right - 1));
    }
    bool VerifySquenceOfBST(vector<int> sequence) {
        //{5,7,6,9,11,10,8}
        if(sequence.empty())
        {
            return false;
        }
        return isBST(sequence, 0, sequence.size() - 1);
    }
};

  

 相关题目:

  计算器:

输入为一个算数表达式的字符串。输出它经过计算之后的结果。如果该字符串不满足算数表达式则输出字符串Error。
注意:
0. 输入中的数只有非负整数。小数、负数等均需要输出Error。
1. 需要支持运算符加、减、乘以及括号。
2. 运算符的优先级为:括号>加=减>乘。
3. 支持数与操作符、操作符与操作符之间有任意空格。
3. 输入和运算过程中不需要考虑整数溢出,用32位的int即可。 https://www.nowcoder.com/practice/fb2392f481d84a4cabb7cab9335a7896

猜你喜欢

转载自www.cnblogs.com/xiexinbei0318/p/11432867.html