LeetCode 110 平衡二叉樹

2021-08-28 13:37:38 字數 2160 閱讀 8078

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

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

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

遞迴解法。首先判斷是否空樹,然後判斷左右節點的深度差絕對值是否大於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 depth(self,root):

if root==none:

return 0

left=self.depth(root.left)

right=self.depth(root.right)

return max(left,right)+1

def isbalanced(self, root):

""":type root: treenode

:rtype: bool

"""if root==none:

return true

if abs(self.depth(root.left)-self.depth(root.right))>1:

return false

else:

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

分析1:

我對於二叉樹這塊的遞迴解法還是有一些抗拒,因為演算法效率不高,又使用python語言。但總體思路還是清晰的。

使用master公式求時間複雜度為o(nlogn)

思路2:

觀察思路1可發現它對於乙個節點多次判斷導致效率低下。因此做出修正,對乙個數的判斷自下而上,判斷其子樹是否是平衡的,若不平衡直接結束程式。這樣每個節點最多被判斷一次,極大地提公升了效率。

**2:

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution:

def depth(self,root):

if root==none:

return 0

left=self.depth(root.left)

if left==-1:

return -1

right=self.depth(root.right)

if right==-1:

return -1

return -1 if abs(left-right)>1 else 1+max(left,right)

def isbalanced(self, root):

""":type root: treenode

:rtype: bool

"""return self.depth(root)!=-1

分析3:

本方法思路**參考

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