劍指 Offer 55 II 平衡二叉樹

2021-10-09 05:08:59 字數 1008 閱讀 8041

輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹;

二叉樹中任意節點的左右子樹的深度相差不超過1,則是平衡二叉樹

回顧遞迴求深度的方案,是先求得左右子樹的深度,然後進一步得到當前節點的深度,即先左右子樹,再根節點;可以直接加入乙個全域性變數記錄當前是否平衡,並額外引入乙個邏輯來比較子樹的深度;

bfs迭代求深度的演算法,是當前節點從上到下所在的層數,每個節點並不知道自己的深度(從下往上,從葉子節點到自身)

class

solution

:def

isbalanced

(self, root: treenode)

->

bool

: balanced =

true

#全域性變數記錄當前是否平衡

defgetbalanced

(node)

:nonlocal balanced

ifnot node or

not balanced:

##寫在自定義函式裡的遞迴出口;節點為空或者不平衡,則return false

return

false

leftdepth = getbalanced(node.left)

rightdepth = getbalanced(node.right)

ifabs

(leftdepth-rightdepth)

>1:

#額外引入邏輯比較子樹的深度

balanced =

false

return

max(leftdepth,rightdepth)+1

#返回當前節點自身的深度

getbalanced(root)

return balanced

深度是從下往上,從葉節點到自身,符合dfs遞迴的思想,bfs的迭代思想是從上到下記錄層數

時間複雜度o(n)遍歷整個樹,空間複雜度o(h),h表示樹的高度,即遞迴的棧的空間消耗

劍指offer 55 II 平衡二叉樹

題目鏈結 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 true 示例 2 給定二叉樹 1,2,2,3,3,null,nu...

劍指offer55 II 平衡二叉樹

題目 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。分析 平衡二叉樹 balance tree 的定義是 二叉樹中任意節點的左右子樹的深度相差不超過1。注意是任意節點,並不只是根節點的 左深度 右深度 還有其子樹也必須是平衡二叉樹。從該定義也可知是利用遞迴來解決這個問題。class soluti...

劍指 Offer 55 II 平衡二叉樹

package com.heu.wsq.leetcode.tree 劍指 offer 55 ii.平衡二叉樹 author wsq date 2020 12 22 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。示例 1...