C++
1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 int dfs(TreeNode *root, bool &flag, int cur) { 13 if (!root || !flag) return cur; 14 int leftH = dfs(root->left, flag, cur+1); 15 if (!flag) return cur; 16 int rightH = dfs(root->right, flag, cur+1); 17 if (abs(leftH-rightH) <= 1 && flag) flag = true; 18 else flag = false; 19 return max(leftH, rightH); 20 } 21 bool isBalanced(TreeNode *root) { 22 // Start typing your C/C++ solution below 23 // DO NOT write int main() function 24 if (!root) return true; 25 bool flag = true; 26 if (abs(dfs(root->left, flag, 0)-dfs(root->right, flag, 0)) <= 1 && flag) return true; 27 else return false; 28 } 29 };
Java: Time complexity: O(N), Space complexity: O(LOGN)
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 public class Solution { 11 public boolean isBalanced(TreeNode root) { 12 return checkHeight(root) != -1; 13 } 14 private int checkHeight(TreeNode root) 15 { 16 if (root == null) 17 { 18 return 0; 19 } 20 int leftHeight = checkHeight(root.left); 21 if (leftHeight == -1) 22 { 23 return -1; 24 } 25 int rightHeight = checkHeight(root.right); 26 if (rightHeight == -1) 27 { 28 return -1; 29 } 30 int heightDiff = Math.abs(leftHeight - rightHeight); 31 if (heightDiff > 1) 32 { 33 return -1; 34 } 35 else 36 { 37 return Math.max(leftHeight, rightHeight) + 1; 38 } 39 } 40 }