zoukankan      html  css  js  c++  java
  • 剑指offer23题--经典递归

    /**
     * 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
     * 如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
     * <p>
     * 思路
     * 二叉搜索树,满足根节点大于左子树所有节点,小于右子树左右节点
     * 将数组从后往前遍历,每个节点都是所在子树的根节点
     * 根节点,大于左子树所有节点,小于右子树左右节点,且子树仍然满足二叉搜索树
     * <p>
     * 把最后一个看作root,当前树怎么满足二叉搜索树的后序遍历。
     */
    public class Solution23 {
        public boolean VerifySquenceOfBST(int[] sequence) {
            if (sequence == null || sequence.length == 0) {
                return false;
            }
            return verifySquenceOfBST(sequence, 0, sequence.length - 1);
        }
    
        private boolean verifySquenceOfBST(int[] sequence, int start, int root) {
            /**
             * 1、处理退出条件
             */
            if (start >= root) {
                return true;
            }
            int i = start;
    
    
            /**
             * 2、处理结果
             */
            //根节点,大于左子树所有节点
            for (; i < root; i++) {
                if (sequence[i] >= sequence[root]) {
                    break;
                }
            }
            //根节点,小于右子树左右节点
            for (int right = i; right < root; right++) {
                if (sequence[right] < sequence[root]) {
                    return false;
                }
            }
            /**
             * 3、缩小范围
             */
            //子树仍然满足二叉搜索树
            return verifySquenceOfBST(sequence, 0, i - 1) && verifySquenceOfBST(sequence, i, root - 1);
        }
    }

    小结:

    1、处理退出条件

    2、处理结果

    3、缩小范围

  • 相关阅读:
    [Re] Spring-4(SourceCode)
    [Re] Spring-3(JdbcTemplate)
    [Re] Spring-2(IOC+AOP)
    [Re] Spring-1(bean)
    08-MyBatis(2)
    08-传输层(7)
    07-传输层(6)
    06-传输层(5)
    05-传输层(4)
    ALS推荐算法
  • 原文地址:https://www.cnblogs.com/Adam-Ye/p/13542133.html
Copyright © 2011-2022 走看看