判斷二叉樹是否是高度平衡二叉樹
阿新 • • 發佈:2019-02-17
這道題是個easy,easy的基礎是已經知道怎麼求二叉樹的最大深度了(雖然這是一個基本功2333)如果知道怎麼求二叉樹最大深度,那麼這道題的思路可以是:
用遞迴Recursion,首先構建一個新的函式求樹的最大深度,然後求左子樹最大深度,右子樹最大深度,兩者之差大於1就return false,然後菜判斷左右子樹是不是分別依舊是高度平衡樹,結束。
如何求二叉樹的最大深度?
private int deepestHeight(TreeNode node){ if(node == null) return 0; int lH = deepestHeight(node.left); int rH = deepestHeight(node.right); return lH>rH?lH+1 : rH+1; }
思路同樣是一個遞迴Recursion,分別求左右子樹的最大深度,誰深,誰再加1就是整棵樹的最大深度了。
知道怎麼求二叉樹的最大深度後就可以寫這道題了:
public class Solution { /** * @param root: The root of binary tree. * @return: True if this Binary tree is Balanced, or false. */ public boolean isBalanced(TreeNode root) { if(root == null) return true; int left = deepestHeight(root.left); int right = deepestHeight(root.right); if(Math.abs(left-right)>1) return false; return isBalanced(root.left)&&isBalanced(root.right); } private int deepestHeight(TreeNode node){ if(node == null) return 0; int lH = deepestHeight(node.left); int rH = deepestHeight(node.right); return lH>rH?lH+1 : rH+1; } }