劍指 Offer 55 II 平衡二叉樹

2022-06-11 20:54:10 字數 1072 閱讀 4007

思路:

一開始想著怎麼遍歷來找,想了一會找不到什麼思路,然後突然發現可以用遞迴來做

遞迴思路也很簡單:返回true的條件=左子樹為true+右子樹為true+左右子樹深度差不超過1

於是寫出**:

class

solution //

程式的出口是什麼

if(isbalanced(root.left)&&isbalanced(root.right))

}return

false

; }

public

intheight(treenode root)

return math.max(height(root.left),height(root.right))+1;}}

然後讓我們分析一下這個是什麼遍歷,然後分析一下複雜度

什麼順序遍歷看你的**怎麼寫

複雜度的話,我們很清楚的能看到,我們造成了很多重複計算

例如計算root的左右子樹高度差時,就需要計算左子樹的高度,在計算左子樹是否滿足要求時也要計算這些,有很多重複運算

那麼這個屬於從上往下,浪費了很多運算,如果從下往上,是否就可以不重複計算

class

solution

private

intrecur(treenode root)

}

具體看這道題的解析

感覺還是有點難想出來

劍指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 平衡二叉樹

輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹 二叉樹中任意節點的左右子樹的深度相差不超過1,則是平衡二叉樹 回顧遞迴求深度的方案,是先求得左右子樹的深度,然後進一步得到當前節點的深度,即先左右子樹,再根節點 可以直接加入乙個全域性變數記錄當前是否平衡,並額外引入乙個邏輯來比較子樹的深度 bfs迭...