zoukankan      html  css  js  c++  java
  • 剑指Offer——二叉搜索树的后序遍历序列

    Question

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

    Solution

    思想就是后续遍历的最后一个节点是根节点,然后从左边往右,先是左子树再是右子树。

    然后从头开始比根节点小的,作为左子树,那么剩下的节点都要求比根节点大,因为剩下的节点都将做右子树。 如果不满足则直接返回false。

    如果满足的话,左子树和右子树又分别可以进行递归判断。

    Code

    class Solution {
    public:
        bool VerifySquenceOfBST(vector<int> sequence) {
    		if (sequence.size() <= 0)
                return false;
            return isLastOrder(sequence, 0, sequence.size() - 1);
        }
        bool isLastOrder(vector<int>& sequence, int start, int end) {
            int rootValue = sequence[end];
            int leftEnd = start;
            while (leftEnd <= end - 1 && sequence[leftEnd] <= rootValue)
                leftEnd++;
            for (int i = leftEnd; i <= end - 1; i++) {
                if (sequence[i] < rootValue)
                    return false;
            }
            int leftLength = leftEnd - start;
            int flag = true;
            if (leftLength > 0) {
                flag = isLastOrder(sequence, start, leftEnd - 1);
            }
            if (flag && leftLength < end - start) {
                flag = isLastOrder(sequence, leftEnd, end - 1);
            }
            
            return flag;
        }
    };
    
  • 相关阅读:
    springboot设置请求超时
    Dockerfile 中 ENTRYPOINT 与 CMD 的区别
    iptables
    git commit statistics
    query spring mongo limit or skip test
    创建证书
    Linux基本网络配置
    k8s
    iis express添加网站,并启动
    用cmd的方式执行exe程序
  • 原文地址:https://www.cnblogs.com/zhonghuasong/p/7096562.html
Copyright © 2011-2022 走看看