zoukankan      html  css  js  c++  java
  • 二叉树中最大的二叉搜索子树的大小


    /**
    * 返回二叉树中最大的二叉搜索子树的大小
    * <p>
    * 二叉搜索子树:
    * 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
    * 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
    * 它的左、右子树也分别为二叉排序树
    */
    public class MaxSubBSTSize {

    public static int maxSubBSTSize(Node head) {
    if (head == null) {
    return 0;
    }
    return process(head).maxSubBSTSize;
    }

    public static ResultInfo process(Node node) {
    if (node == null) {
    return null;
    }
    ResultInfo leftInfo = process(node.left);
    ResultInfo rightInfo = process(node.right);
    int min = node.value;
    int max = node.value;
    int maxSubBSTSize = 0;
    if (leftInfo != null) {
    min = Math.min(min, leftInfo.min);
    max = Math.max(max, leftInfo.max);
    maxSubBSTSize = Math.max(maxSubBSTSize, leftInfo.maxSubBSTSize);
    }
    if (rightInfo != null) {
    min = Math.min(min, rightInfo.min);
    max = Math.max(max, rightInfo.max);
    maxSubBSTSize = Math.max(maxSubBSTSize, rightInfo.maxSubBSTSize);
    }

    boolean isBST = false;
    if ((leftInfo == null ? true : (leftInfo.isAllBST && leftInfo.max < node.value))
    && (rightInfo == null ? true : (rightInfo.isAllBST && rightInfo.min > node.value))) {
    isBST = true;
    maxSubBSTSize = (leftInfo == null ? 0 : leftInfo.maxSubBSTSize) + (rightInfo == null ? 0 : rightInfo.maxSubBSTSize) + 1;
    }
    return new ResultInfo(isBST, maxSubBSTSize, min, max);
    }

    /**
    * 向左右子树索要信息
    */
    public static class ResultInfo {

    // 是否是二叉搜索子树
    public boolean isAllBST;

    // 最大二叉搜索子树的大小
    public int maxSubBSTSize;

    public int min;

    public int max;

    public ResultInfo(boolean is, int size, int mi, int ma) {
    isAllBST = is;
    maxSubBSTSize = size;
    min = mi;
    max = ma;
    }

    }

    /**
    * 二叉树结构
    */
    public static class Node {

    // 节点值
    private int value;

    public Node left;

    public Node right;

    }

    }

    /* 如有意见或建议,欢迎评论区留言;如发现代码有误,欢迎批评指正 */
  • 相关阅读:
    spring的@Transactional注解详细用法
    C#中对string与string[]的初步操作
    响应式下的雪碧图解决方案 - 活用background-size / background-position
    background-position 详解
    sass学习笔记
    微信小程序实操-image height:auto问题,url地址报错,“不在以下合法域名列表中”问题等
    如何开发一个微信小程序
    括号生成 回溯算法 递归 深度优先遍历 剪枝
    前K个高频元素 数字型 Hash表解决
    寻找重复的数 hash表
  • 原文地址:https://www.cnblogs.com/laydown/p/12977339.html
Copyright © 2011-2022 走看看