題目:輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。方法一:自頂向下,先序遍歷,判斷深度
遞迴判斷每個系是不是平衡二叉樹,即左右結點的高度差在 1 之內,這裡要用到上一題的**,求樹的深度。
容易想到,但是計算深度的時候,會產生大量的重複計算,時間複雜度較高
class
solution
if(math.
abs(
height
(root.left)
-height
(root.right)
)<=1)
return
false;}
// 求樹的深度
intheight
(treenode root)
return math.
max(
height
(root.left)
,height
(root.right))+
1;}}
方法二:自底向上
思路:對二叉樹進行後續遍歷,從底到頂返回子樹深度,如果子樹不是平衡二叉樹,直接返回進行剪枝
class
solution
intrecur
(treenode root)
int left =
recur
(root.left);if
(left ==-1
)int right =
recur
(root.right);if
(right ==-1
)return math.
abs(left - right)
<
2? math.
max(left, right)+1
:-1;
}}
面試題55 II 平衡二叉樹
分析方法一 先序遍歷每乙個節點,並比較左右子樹高度,如果有 1則返回false 根據上一題求二叉樹深度的啟發,可以先求出左右子樹的深度,然後判斷深度差的絕對值是否大於1,若大於1,則返回false class solution 求深度的方法 private int getdepth treenode...
leetcode 面試題55 平衡二叉樹
面試題55 ii.平衡二叉樹 難度簡單27 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回true。示例 2 給定二叉樹 1,...
平衡二叉樹例題 面試題 平衡二叉樹
題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。知識點平衡二叉樹 qiang的思路 平衡二叉樹是指乙個二叉樹的左子樹深度相差不超過1,可以相等或相差為1。為了判斷乙個二叉樹是不是平衡二叉樹,我們只需要計算出左子樹和右子樹的深度,然後進行對比即可。同樣在計算子樹深度的時候,我們又需要對每個節點...