判斷是否為平衡二叉樹

2021-10-02 16:21:53 字數 1731 閱讀 4793

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹

定義:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。

舉例:

判斷二叉樹是否為平衡二叉樹

例1: e

/ \

a d

/ \b c

例2:e/a

/ \b c

例3:e

/ \

a d

/ \ \

b c f

\g

例1是平衡二叉樹,滿足平衡二叉樹的定義。e的左子樹深度為3,e的右子樹深度為2,並且左右子樹都是平衡二叉樹。

例2不是平衡二叉樹,e的左子樹深度為3,e的右子樹深度為1。

例3不是平衡二叉樹,e的右子樹不是平衡二叉樹。

# -*- coding: utf-8 -*-

"""判斷二叉樹

e/ \

a d

/ \ \

b c f\g

"""class

treenode

:def

__init__

(self, x)

: self.val = x

self.left =

none

self.right =

none

class

solution

:def

isbanlance

(self, p)

:if p is

none

:return

true

left = self.depth(p.left)

right = self.depth(p.right)

return

abs(left - right)

<=

1and self.isbanlance(p.left)

and self.isbanlance(p.right)

defdepth

(self, p)

:if p is

none

:return

0return1+

max(self.depth(p.left)

, self.depth(p.right)

)if __name__ ==

'__main__'

: a = treenode(

"a")

b = treenode(

"b")

c = treenode(

"c")

d = treenode(

"d")

e = treenode(

"e")

f = treenode(

"f")

g = treenode(

"g")

root = e

e.left = a

e.right = d

a.left = b

a.right = c

d.right = f

f.right = g

s = solution(

) result = s.isbanlance(root)

print

(result)

輸出結果:false

判斷是否為平衡二叉樹

本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1 從頂至底 暴力法 暴力法的思想就是求出左右子樹的高度,然後比較左子樹的高度和右子樹的高度是否符合題意,如果符合,再去判斷左子樹和右子樹是否為平衡二叉樹。此法複雜度較高,因為是從頂到底呼叫求高度函式,其實在求...

判斷是否為平衡二叉樹

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

判斷二叉樹是否為平衡二叉樹

一 線性思維 遍歷每個節點都時候,求左右子樹的深度,如果左右子樹深度相差不超過1,繼續遞迴遍歷左右節點,此種方法會重複遍歷,時間效率不高 is balanced t if t is null return true left treedepth t.left right treedepth t.ri...