/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNode left; * public TreeNode right; * public TreeNode(int x) { val = x; } * } */ public class Solution { private int height(TreeNode node) { if (node == null) { return 0; } int lH = height(node.left); if (lH == -1) { return -1; } int rH = height(node.right); if (rH == -1) { return -1; } if (lH - rH < -1 || lH - rH > 1) { return -1; } return Math.Max(lH, rH) + 1; } public bool IsBalanced(TreeNode root) { if (root == null) { return true; } return height(root) != -1; } }
https://leetcode.com/problems/balanced-binary-tree/#/description
补充一个python的实现:
1 class Solution: 2 def __init__(self): 3 self.result = True 4 5 def maxDepth(self,root): 6 if root == None: 7 return 0 8 l = self.maxDepth(root.left) 9 r = self.maxDepth(root.right) 10 d = max(l,r) + 1 11 if abs(l - r) > 1: 12 self.result = False 13 return d 14 15 def isBalanced(self, root: TreeNode) -> bool: 16 self.maxDepth(root) 17 return self.result
Java版本:
1 class Solution { 2 public boolean isBalanced(TreeNode root) { 3 return height(root) >= 0; 4 } 5 6 public int height(TreeNode root) { 7 if (root == null) { 8 return 0; 9 } 10 int leftHeight = height(root.left); 11 int rightHeight = height(root.right); 12 if (leftHeight == -1 || rightHeight == -1 || Math.abs(leftHeight - rightHeight) > 1) { 13 return -1; 14 } else { 15 return Math.max(leftHeight, rightHeight) + 1; 16 } 17 } 18 }