*平衡二叉树

题目

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
在这里插入图片描述

分析

延续上一道题二叉树深度的思路,如果发现节点左子树的高度和右子树高度之差大于1,则不满足题目要求,返回-1,一直递归返回-1,最后判断返回值是否为-1,为-1返回false,其余情况返回true。

代码

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

用flag记录状态思路更简单。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    boolean flag = true;
    public boolean isBalanced(TreeNode root) {
        int depth = 0;
        int result = dfs(root);
        return flag;
    }
    int dfs(TreeNode root){
        if(root == null){
            return 0;
        }
        int left = dfs(root.left);
        int right=dfs(root.right);
        if(Math.abs(left-right)>1){
            flag = false;
        }
        return Math.max(left,right)+1;
    }
}

在这里插入图片描述


版权声明:本文为Jiaodaqiaobiluo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>