平衡二叉樹
題目描述
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
在這裡,我們只需要考慮其平衡性,不需要考慮其是不是排序二叉樹
思路:難點:既想返回子樹是不是平衡的結果,又想返回子樹的深度,但乙個方法不能返回兩個引數。
解決思路:
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 若這棵二...