Balanced Binary Tree
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
Example
Given binary tree A={3,9,20,#,#,15,7}
, B={3,#,20,15,7}
A) 3 B) 3 / \ 9 20 20 / \ / 15 7 15 7
The binary tree A is a height-balanced binary tree, but B is not.
SOLUTION :
二叉树的问题,必须是分治大法好!
首先分析,这个题最终返回的是boolean值,但是中间要用到深度,是int值,所以要做一个递归函数方便统计最大深度,这个递归函数需要传入root,返回的是int值最大深度。
分左右两边去递归求两边最大深度,但是这个题是看这个树是不是平衡,所以中间只要出现不平衡那么整个树就不平衡,所以中间要加一些中止判断条件。
考虑中止判断条件时候考虑,一共有三种情况会导致整个树不平衡:1,左子树不平衡。2,右子树不平衡。3,左右子树平衡,但是高度差大于1.
于是开始写代码:
public class Solution { /** * @param root: The root of binary tree. * @return: True if this Binary tree is Balanced, or false. */ public boolean isBalanced(TreeNode root) { if (root == null){ return true; } return maxDepth(root) != -1; } private int maxDepth(TreeNode root){ if (root == null){ return 0; } int left = maxDepth(root.left); int right = maxDepth(root.right); // 用-1代表不平衡 if (left == -1 || right == -1 || Math.abs(left - right) > 1){ return -1; } // 求左右子树最大深度 return Math.max(left, right) + 1; } }
时间: 2024-10-07 18:09:36