0二叉樹簡單 牛客NC62 平衡二叉樹

2021-10-10 11:14:28 字數 1623 閱讀 4151

平衡二叉樹

題目描述

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

在這裡,我們只需要考慮其平衡性,不需要考慮其是不是排序二叉樹

思路:難點:既想返回子樹是不是平衡的結果,又想返回子樹的深度,但乙個方法不能返回兩個引數。

解決思路:

1.只要有乙個子樹不平衡,即樹不平衡。用乙個全域性變數標記是不是平衡,初始設為true,當有子樹不平衡,即修改為false。用方法遞迴求每個節點的深度,判斷是否平衡。好處是每個節點只用訪問一遍就可以了,求一次樹的深度就能知道是否平衡。

2.寫乙個方法求子樹深度,比較左右子樹是否平衡,判斷乙個子樹是否平衡看三個條件:左子樹是否平衡;右子樹是否平衡;左右子樹的高度差絕對值是否小於2。

思路一示例:

public

class

solution

public

intdepth

(treenode root)

int a =

depth

(root.left)

;int b =

depth

(root.right);if

(math.

abs(a-b)

>1)

return math.

max(a,b)+1

;}}

思路二示例一:

示例一存在重複求子樹的高度,有優化空間。

public

class

solution

return

isbalanced_solution

(root.left)

&&isbalanced_solution

(root.right)

&& math.

abs(

depth

(root.left)

-depth

(root.right)

)<2;

}public

intdepth

(treenode root)

return math.

max(

depth

(root.left)

,depth

(root.right))+

1;}}

示例一重複求子樹的高度,改造求樹高度的方法,要求當已經判斷出子樹不是平衡二叉樹時,就不要再去求其他子樹的高度了,直接向上返回表示非平衡二叉樹的數字。

public

class

solution

return

false;}

public

inttreedepth

(treenode root)

int l =

treedepth

(root.left);if

(l ==-1

)int r =

treedepth

(root.right);if

(r ==-1

)if(l - r <=

1&& l - r >=-1

)else

}}

牛客(39)平衡二叉樹

題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。public boolean isbalanced solution treenode root 它是一 棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。if math.abs treedepth root...

平衡二叉樹例題 平衡二叉樹

acwing 72.平衡二叉樹 思路一 求每個節點的左右子樹深度,根據深度差判斷,直到葉子節點結束,效率不夠高,每個節點都要用兩次計算深度的遞迴函式 思路二 從葉子節點開始,計算深度差,一旦有深度差大於1的,就直接返回0,也不用管上面的深度是不是正確了,畢竟我們只需要true和false兩種狀態,省...

二叉樹 平衡二叉樹

1.題目 給定乙個二叉樹,判斷這棵二叉樹是否是高度平衡的二叉樹 平衡二叉樹 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1 2.題目分析 1 如果乙個節點的兩個子樹的深度之差超過1,則不是平衡二叉樹 2 如果乙個節點的兩個子樹的深度之差不超過1,則是平衡二叉樹 3.程式分析 1 若這棵二...