LeetCode: 110 判斷平衡二叉樹
給定一個二叉樹,判斷它是否是高度平衡的二叉樹。 本題中,一棵高度平衡二叉樹定義爲: 一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過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
思路: 依次遞歸遍歷左右子樹,遞歸到每一層都判斷左右子樹高度差是否 > 1
二叉樹定義:
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
2中遞歸實現代碼:
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
def gethight(root):
if not root: return 0
return 1 + max(gethight(root.left), gethight(root.right))
if not root: return True
return (abs(gethight(root.left) - gethight(root.right))<2) and self.isBalanced(root.left) and self.isBalanced(root.right)
def isBalanced2(self, root: TreeNode) -> bool:
self.res = True
def helper(root):
if not root: return 0
left = helper(root.left)
right = helper(root.right)
# 以上的 left , right 單獨寫出來是爲了作比較
if abs(left-right)>1:
self.res = False
return 1 + max(left,right)
helper(root)
return self.res