110. 平衡二叉树 简单 递归
Published on 2022-11-17 23:01 in 暂未分类 with 林动

110. 平衡二叉树 简单 递归

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

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

    一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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

    递归朴素思路(自顶向下):

    判断中,先用一个递归函数计算两个子树的深度,然后判断两个子树深度时候差在1内,然后再分别判断两个子树是否平衡二叉树,这样会导致对整棵树同一个节点多次遍历,时间复杂度是O(n2)

    优化思路(自底向上):

    在计算数的深度的时候我们是取两个子树的深度最大值:那么我们就可以顺便判断当前这颗树是否是平衡二叉树,返回-1表示不是。那么实际上只是遍历了一次。

    /**
     * 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 maxd(root)!=-1;
        }
        public int maxd(TreeNode root){
            if(root==null)return 0;
            int l=maxd(root.left);
            int r=maxd(root.right);
            if(l==-1||r==-1||Math.abs(l-r)>1)return -1;
            return Math.max(l,r)+1;
        }
    }
    
    posted @   林动  阅读(5)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
    · 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
    · 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
    · 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
    · 【自荐】一款简洁、开源的在线白板工具 Drawnix
    点击右上角即可分享
    微信分享提示