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

2021-10-01 02:39:09 字數 2060 閱讀 8220

給定一棵樹,判斷是否為平衡二叉樹

逐層根據高度判斷是否平衡

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 20.43%

計算高度過程中判斷

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]

結果:leetcode beat 99.92%

也可以寫成返回值中返回平衡與否

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