剑指offer - 平衡二叉树(Java实现)

题目链接:https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=13&&tqId=11192&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

  思路一:首先判断当前这个树是否满足平衡二叉树条件:左右子树高度差不大于 1,如果满足分别判断其左右子树是否为平衡二叉树,如果最后树为空,则满足平衡二叉树的条件,则作为递归出口。

import java.util.*;

public class Solution {
    Map<TreeNode, Integer> map = new HashMap<>();
    public boolean IsBalanced_Solution(TreeNode root) {
        if(root == null) return true;
        return Math.abs(Depth(root.left) - Depth(root.right)) <= 1
            && IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
    }
    public int Depth(TreeNode root) {
        if(root == null) return 0;
        return Math.max(Depth(root.left), Depth(root.right)) + 1;
    }
}

  思路二:首先我们求出所有子树的高度,然后逐一的判断每一颗子树是否为平衡二叉树。

import java.util.*;

public class Solution {
    Map<TreeNode, Integer> map = new HashMap<>();
    public boolean IsBalanced_Solution(TreeNode root) {
        Depth(root); //预先处理每一颗树的高度
        return Judge(root);
    }
    public boolean Judge(TreeNode root) {
        if(root == null) return true; 
        return Math.abs(map.get(root.left) - map.get(root.right)) <= 1 
            && Judge(root.left) && Judge(root.right);
    }
    public int Depth(TreeNode root) {
        if(root == null) {
            map.put(root, 0);
            return 0;
        }
        if(map.get(root) != null) return map.get(root);
        map.put(root, Math.max(Depth(root.left), Depth(root.right)) + 1);
        return map.get(root);
    }
}
【剑指offer】题目全解 文章被收录于专栏

本专栏主要是刷剑指offer的题解记录

全部评论

相关推荐

今天 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
点赞 评论 收藏
分享
10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务