• leetcode 110. Balanced Binary Tree 平衡二叉树(简单)


    一、题目大意

    给定一个二叉树,判断它是否是高度平衡的二叉树。

    本题中,一棵高度平衡二叉树定义为:

    一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

    示例 1:

    输入:root = [3,9,20,null,null,15,7]
    输出:true

    示例 2:

    输入:root = [1,2,2,3,3,null,null,4,4]
    输出:false

    示例 3:

    输入:root = []
    输出:true

    提示:

    • 树中的节点数在范围 [0, 5000] 内

    • -104 <= Node.val <= 104

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/balanced-binary-tree
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    二、解题思路

    思路:定义一个求各个节点深度的函数,然后中每个节点的两个子树来比较深度差,针对每个点都会被计算深度时访问一次进行优化,如果发现子树不平衡,则不计算具体的深度,而是直接返回-1,优化后的谅赤:对于每一个节点,通过checkDepth方法递归获得左右子树的深度,如果子树是平衡的,则返回真实的深度,若不平衡,直接返回-1。

    三、解题方法

    3.1 Java实现

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     * int val;
     * TreeNode left;
     * TreeNode right;
     * TreeNode() {}
     * TreeNode(int val) { this.val = val; }
     * TreeNode(int val, TreeNode left, TreeNode right) {
     * this.val = val;
     * this.left = left;
     * this.right = right;
     * }
     * }
     */
    class Solution {
        public boolean isBalanced(TreeNode root) {
            return checkDepth(root) != -1;
        }
    
        int checkDepth(TreeNode root) {
            if (root == null) {
                return 0;
            }
            int left = checkDepth(root.left);
            if (left == -1) {
                return -1;
            }
            int right = checkDepth(root.right);
            if (right == -1) {
                return -1;
            }
            if (Math.abs(left - right) > 1) {
                return -1;
            }
            return Math.max(left, right) + 1;
        }
    }
    

    四、总结小记

    • 2022/9/13 当中层切记不要只是上传下达
  • 相关阅读:
    固态硬盘 每秒1.5G
    editPlus
    juqery 插入一行
    BufferedReader读取UTF8文件中文乱码
    jquery table 操作
    noSql
    javascript 开发规范
    同一服务器上安装多个tomcat
    100 个搜索引擎
    firefox 开发sdk
  • 原文地址:https://www.cnblogs.com/okokabcd/p/16688786.html
Copyright © 2020-2023  润新知