题解 | #判断二叉树是否为平衡二叉树# DFS遍历树判断是否是平衡二叉树

判断二叉树是否为平衡二叉树

http://www.nowcoder.com/practice/f4523caf0205476985516212047ac8e7

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /*
         平衡二叉树:对于任何一个节点来说,他的左右子树高度差不能超过1;

         解题思路:直接DFS遍历每一节点,判断节点的左右子树的高度差。如果超过1,直接不是平衡二叉树。
    */
    public boolean isBalanced (TreeNode root) {
        if(root==null) return true;
        return dfs(root);
    }

    public boolean dfs(TreeNode root){
        // 获取当前节点的左子树高度
        int leftHeight = getHeight(root.left);
        // 获取当前节点的右子树高度 
        int rightHeight = getHeight(root.right);
        // 比较左右子树高度差
        if(Math.abs(leftHeight-rightHeight)>1) return false;

        // 假设左右子树都合法;
        boolean leftSign=true;
        boolean rightSign=true;
        // 递归左子树
        if(root.left!=null){
            leftSign = dfs(root.left);
        }
        // 递归右子树
        if(root.right!=null){
            rightSign = dfs(root.right);
        }

        // 只有当前节点的左右子树都合法,才说明当前节点合法
        if(leftSign && rightSign){
            return true;
        }else{
            return false;
        }
    }

    // 获取一个节点的高度
    public int getHeight(TreeNode root){
        if(root==null) return 0;
        return Math.max(getHeight(root.left),getHeight(root.right))+1;
    }


    // 如果以上代码看得懂!判断平衡二叉树可以简化成这样写。 
  public boolean isBalanced (TreeNode root) {
        // 递归终止条件
         if(root==null) return true;
        
        // 如果当前节点高度差合法, 并且当前节点的左子树是合法 并且 当前节点的右子树是合法
       return Math.abs(getHeight(root.left)-getHeight(root.right))<=1 && isBalanced(root.left) && isBalanced(root.right); }


}

全部评论

相关推荐

02-01 12:05
复旦大学 Java
腾讯的提前批大概率应该是没有笔试的,但是这个时候有相当部分的同学简历估计都没有准备好,没准备好的同学也不用急,大部分都是3月之后开,这个时候开的绝大多数都是神仙打架,问的东西也比较难,打算投递的同学也多看下计算机网络和操作系统,腾讯对这部分的知识问的比较多。另外多刷下牛客的热门题库,刷题注意刷ACM模式,和牛客的周赛题,腾讯有的部门会从这里面出原题。我是@程序员花海关注我,带你了解更多校招资讯!
程序员花海:还没有来得及准备的同学可以看下学习路线:https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users算法题:https://www.nowcoder.com/feed/main/detail/20e7a999fa04485b88340a274411ca0d?sourceSSR=users八股文:https://www.nowcoder.com/discuss/833102362771251200?sourceSSR=users简历书写方式:https://www.nowcoder.com/discuss/839907820706205696?sourceSSR=users都是以前在牛客发的文章~
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
码农索隆:以下是我以我微薄的认知提供的建议: 1.考个教师资格证,去当体育考试。 2.去健身房当健身教练(因为在我印象里面体育生身材都不错)。
点赞 评论 收藏
分享
喵_coding:年底缺人是短视频营造出来的 而且一般说的也很宽泛 不是特指后端
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务