LeetCode之判斷平衡二叉樹
阿新 • • 發佈:2018-11-07
問題描述:
給定一個二叉樹,判斷它是否是高度平衡的二叉樹。
本題中,一棵高度平衡二叉樹定義為:
一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。
示例 1:
給定二叉樹 [3,9,20,null,null,15,7]
3 / \ 9 20 / \ 15 7
返回 true
。
示例 2:
給定二叉樹 [1,2,2,3,3,null,null,4,4]
1 / \ 2 2 / \ 3 3 / \ 4 4
返回 false
解題思路:解這種判斷思路,沒有好辦法,就是按照定義去判斷,所以演算法中需要判斷二叉樹高度。
老規矩 先來自己的
public boolean isBalanced(TreeNode root) { if(root == null){ return true; }else{ return (Math.abs(height(root.left)-height(root.right))<=1)&&isBalanced(root.left)&&isBalanced(root.right); } } public int height(TreeNode root){ if(root == null){ return 0; }else{ return 1+Math.max(height(root.left),height(root.right)); } }
接下來,再來大神的,大神做的執行速度比我的快,遞迴寫的很精妙,不容易一次寫成,需要對題目理解很深才能寫出,一般在毫無參考的時候不好直接想出來。
class Solution { public boolean isBalanced(TreeNode root) { return height(root) != -1; } int height(TreeNode root) { if(root == null) return 0; int left = height(root.left); if(left == - 1) return -1; int right = height(root.right); if(right == -1) return -1; if(Math.abs(left - right) > 1) return -1; return Math.max(left, right) + 1; } }