leetcode 110 平衡二叉樹

2021-10-05 22:27:07 字數 2170 閱讀 4282

簡單

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

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

乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過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 。

從頂至低

最簡單的思想,每次獲得根節點的左子樹高度和右子樹高度進行判斷是否為平衡二叉樹

不過這樣會造成重複計算

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

solution

:def

isbalanced

(self, root: treenode)

->

bool:if

not root:

return

true

# 判斷是否平衡

ifabs

(self.height(root.left)

- self.height(root.right)

)>1:

return

false

# 繼續判斷左孩子和右孩子

return self.isbalanced(root.left)

and self.isbalanced(root.right)

# 計算高度

defheight

(self, root):if

not root:

return

0return

max(self.height(root.left)

, self.height(root.right))+

1

從底至頂

先判斷子樹,返回高度,如果某子樹不是平衡樹,則返回 -1

只需判斷函式的返回是否為 -1

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

solution

:def

isbalanced

(self, root: treenode)

->

bool

:return self.height(root)!=-

1def

height

(self, root):if

not root:

return

0

left_height = self.height(root.left)

right_height = self.height(root.right)

if left_height !=-1

and right_height !=-1

andabs

(left_height-right_height)

<=1:

return

max(left_height, right_height)+1

else

:return

-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...