zoukankan      html  css  js  c++  java
  • 给定一棵二叉树的头节点,判断是不是平衡二叉树


    /**
    * 给定一棵二叉树的头节点,判断是不是平衡二叉树
    */
    public class IsBalancedBT {

    public static boolean isBalancedBT(Node root) {
    if (root == null) {
    return true;
    }
    return process(root).isBalanced;
    }

    private static ResultInfo process(Node node) {
    if (node == null) {
    return new ResultInfo(0, true);
    }
    ResultInfo leftResult = process(node.left);
    ResultInfo rightResult = process(node.right);
    int height = Math.max(leftResult.height, rightResult.height) + 1;
    boolean isBalanced = true;
    if (!leftResult.isBalanced || !rightResult.isBalanced || Math.abs(leftResult.height - rightResult.height) > 1) {
    isBalanced = false;
    }
    return new ResultInfo(height, isBalanced);
    }

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

    // 当前高度
    public int height;

    // 是否平衡
    public boolean isBalanced;

    public ResultInfo(int height, boolean isBalanced) {
    this.height = height;
    this.isBalanced = isBalanced;
    }

    }

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

    public Node left;

    public Node right;

    }

    }

    /* 如有意见或建议,欢迎评论区留言;如发现代码有误,欢迎批评指正 */
  • 相关阅读:
    文件操作实例加强
    文件操作的一般基础操作
    列表与if语句的结合
    难题记录
    字典,集合,列表混合使用需注意:
    列表的一些难度操作
    字符串知识巩固
    and与or的用法
    AngularJS中的过滤器
    NodeJS中的静态资源管理服务
  • 原文地址:https://www.cnblogs.com/laydown/p/12952948.html
Copyright © 2011-2022 走看看