leetcode 110 平衡二叉樹

2021-09-12 07:21:48 字數 1877 閱讀 5869

給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。

本題中,一棵高度平衡二叉樹定義為:

乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。

給定二叉樹[3,9,20,null,null,15,7]

3

/ \9 20

/ \

15 7

返回 true

給定二叉樹[1,2,2,3,3,null,null,4,4]

1

/ \2 2

/ \3 3

/ \4 4

返回 false

來自於英文版的dissusion,其中的left == -1 or right == -1 不明白?

class solution(object):

def isbalanced(self, root):

def check(root):

if root is none:

return 0

left = check(root.left)

right = check(root.right)

if left == -1 or right == -1 or abs(left - right) > 1:

return -1

return 1 + max(left, right)

return check(root) != -1

用到的知識點:leetcode104.二叉樹的最大深度

class solution(object):

# recursion

def maxdepth(self, root):

""":type root: treenode

:rtype: int

"""if root is none:

return 0

else:

# 左子樹高度

ld = self.maxdepth(root.left)

# 右子樹高度

rd = self.maxdepth(root.right)

return max(rd,ld)+1

我的思路:

參考修正於:

class solution(object):

def isbalanced(self, root):

""":type root: treenode

:rtype: bool

"""if root is none:

return true

elif abs(self.maxdepth(root.left) - self.maxdepth(root.right)) > 1:

return false

# 以下沒想到

else:

return self.isbalanced(root.left) and self.isbalanced(root.right)

def maxdepth(self, root):

""":type root: treenode

:rtype: int

"""if root is none:

return 0

else:

# 左子樹高度

ld = self.maxdepth(root.left)

# 右子樹高度

rd = self.maxdepth(root.right)

return max(rd, ld) + 1

leetcode 110 平衡二叉樹 平衡二叉樹

leetcode 110 平衡二叉樹 平衡二叉樹要求所有節點的左右子樹的高度差小於1,因此,只需在遍歷的時候返回其左右子樹的深度。definition for a binary tree node.public class treenode treenode int val treenode int...

LeetCode110 平衡二叉樹

給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回true。示例 2 給定二叉樹 1,2,2,3,3,null,nul...

LeetCode 110 平衡二叉樹

給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回true。示例 2 給定二叉樹 1,2,2,3,3,null,nul...