標籤:style blog color io for 代碼
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.
題解:
一種方法是寫一個遞迴求高度的函數,然後再寫一個遞迴函式判斷樹是否是平衡的。
代碼如下:
1 public class Solution { 2 private int height(TreeNode root){ 3 if(root == null) 4 return 0; 5 int left = height(root.left); 6 int right = height(root.right); 7 8 return Math.max(left, right)+1; 9 }10 public boolean isBalanced(TreeNode root) {11 if(root == null)12 return true;13 int left = height(root.left);14 int right = height(root.right);15 16 if(Math.abs(left-right)>1)17 return false;18 return isBalanced(root.left) & isBalanced(root.right);19 }20 }
這種方法耗時428ms。
第二種方法在遞迴求樹的高度的過程中順便判斷樹是否平衡,如果在某個節點處,該節點的左子樹和右子樹高度只差大於1,或者該樹的左子樹或者又子樹不平衡,那麼返回該樹的高度為-1;否則返回該樹的高度。
代碼如下:
1 public class Solution { 2 private int height(TreeNode root){ 3 if(root == null) 4 return 0; 5 int left = height(root.left); 6 int right = height(root.right); 7 8 if(left == -1 || right == -1 || Math.abs(left - right) > 1) 9 return -1;10 return Math.max(left, right)+1;11 }12 public boolean isBalanced(TreeNode root) {13 return height(root) != -1;14 }15 }
這種方法耗時464ms。