輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹
定義:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過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...