110 判斷平衡二叉樹

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章