Leetcode link: https://leetcode.com/problems/balanced-binary-tree/
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined asa binary tree in which the depth of the two subtrees of every node never differ by more than 1.
实现一个方法,检查binary tree 是否平衡;
平衡的定义: 两个子树的高度差不能大于1
思路
1 2个 递归
2 边界条件: boundary condition
2.1 bool IsBalance(TreeNode root), if(root==null)=>return true; 平衡
2.2 int GetHeight(TreeNode root), if(root==null) => return -1; 高度为-1
C#代码:
AC版本
#region Balanced
/// <summary>
/// 获取当前root节点的深度
/// </summary>
/// <param name="root"></param>
/// <returns></returns>
private int GetHeight(TreeNode root)
{
if (root == null)
return -1;
//左节点height/右节点height较大者,加一;得到最高节点;
return Math.Max(GetHeight(root.left),GetHeight(root.right))+1;
}
/// <summary>
/// 判断当前根节点是否平衡
/// </summary>
/// <param name="root"></param>
/// <returns></returns>
public bool IsBalance(TreeNode root)
{
if (root == null)
return true;
int heightDif = GetHeight(root.left) - GetHeight(root.right);
if ( Math.Abs(heightDif) > 1 )
return false;
else//递归判断 左节点平衡&&右节点平衡
{
return IsBalance(root.left) && IsBalance(root.right);
}
}
#endregion