給定一棵樹,判斷是否為平衡二叉樹
逐層根據高度判斷是否平衡
結果:leetcode beat 20.43%def
is_balance1
(self)
:def
height
(node)
:if node is
none
:return
0 l = height(node.left)
r = height(node.right)
return
max(l, r)+1
defbalance
(node)
:if node is
none
:return
true
l_height = height(node.left)
r_height = height(node.right)
ifabs
(l_height - r_height)
>1:
return
false
left_balance = balance(node.left)
right_balance = balance(node.right)
return left_balance and right_balance
return balance(self.root)
計算高度過程中判斷
結果:leetcode beat 99.92%def
is_balance2
(self)
:def
get_height
(node)
:if node is
none
:return
0 left_height = get_height(node.left)
ifnot balance[0]
:return left_height +
1 right_height = get_height(node.right)
ifnot balance[0]
:return right_height +1if
abs(left_height - right_height)
>1:
balance[0]
=false
return
max(left_height, right_height)+1
balance =
[true
] get_height(self.root)
return balance[
0]
也可以寫成返回值中返回平衡與否
def
is_balance
(self)
:def
get_height
(node)
:if node is
none
:return0,
true
left_height, left_balance = get_height(node.left)
ifnot left_balance:
return0,
false
right_height, right_balance = get_height(node.right)
ifnot right_balance:
return0,
false
ifabs
(left_height - right_height)
>1:
return
max(left_height, right_height)+1
,false
return
max(left_height, right_height)+1
,true
h, b = get_height(self.root)
return b
判斷二叉樹是否為平衡二叉樹
一 線性思維 遍歷每個節點都時候,求左右子樹的深度,如果左右子樹深度相差不超過1,繼續遞迴遍歷左右節點,此種方法會重複遍歷,時間效率不高 is balanced t if t is null return true left treedepth t.left right treedepth t.ri...
判斷二叉樹是否為平衡二叉樹
題目 平衡二叉樹的性質為 要麼是一棵空樹,要麼任何乙個節點的左右子樹高度差的絕對值不超過1。給定一棵二叉樹的頭結點head,判斷這棵二叉樹是否為平衡二叉樹。要求 如果二叉樹的節點數為n,要求時間複雜度為o n 判斷二叉樹是否為二叉樹 public boolean isbalance node hea...
判斷二叉樹是否為平衡二叉樹
要判斷二叉樹是否為平衡二叉樹 平衡二叉樹的定義 在乙個二叉樹中 每個節點子樹的左右高度差不超過1 1 首先判斷它的根節點是否為空 若是的話,就是平衡二叉樹 2 分別求出左右子樹的高度 若高度的絕對值不超過一則為平衡二叉樹 計算二叉樹高度 public static int calchigh node...