LeetCode試題之判斷是否是平衡二叉樹
阿新 • • 發佈:2019-01-11
/** * 本題題意:判斷一棵樹是否是平衡二叉樹,平衡二叉樹的左右子樹的高度相差不會超過1 * * 解題思路:其實還是獲取左右子樹的高度 如果差別查過1,那麼就返回false * * 錯誤想法:只要獲取左子樹高度和右子樹高度進行判斷。因為每個子樹可能不是平衡的,高度和平不平沒有關係。只能是每個節點都是平衡的才能是平衡二叉樹。 * */ public class BalancedBinaryTree041 { public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }//初始化構造方法。 } public boolean isBalanced(TreeNode root) { if(root == null){ return true; } //判斷本身是不是 int leftHeight = getTreeHeight(root.left); int rightHeight = getTreeHeight(root.right); if(Math.abs(leftHeight - rightHeight) > 1){ return false; } //判斷左子樹是不是 if(root.left != null){ boolean leftResult = isBalanced(root.left); if(leftResult == false){ return false; } } //判斷右子樹是不是 if(root.right != null){ boolean rightResult = isBalanced(root.right); if(rightResult == false){ return false; } } return true; } //給定節點 求出其高度 【樹的高度是最高的數值】 public int getTreeHeight(TreeNode node){ if(node == null){ return 0; } if(node.left == null && node.right == null){ return 1; } int leftHeight = getTreeHeight(node.left); int rightHeight = getTreeHeight(node.right); return leftHeight >= rightHeight? leftHeight+1 : rightHeight+1; } }