最容易想到的辦法是先序遍歷,從頂至底判斷每個子樹是不是平衡二叉樹。
缺點是產生大量重複計算,**如下。
/*** definition for a binary tree node.
* public class treenode
* } */
class
solution
intdepth(treenode root)
}
k神給的最佳解法:
後序遍歷 + 剪枝 (從底至頂)
覺得函式的設計很巧妙,recur函式返回的依然是深度,不用向上面加乙個depth函式。
同時使用-1判斷子樹是否平衡,一旦出現不平衡情況直接剪枝,在isblanced的用返回值是否為-1判斷是否是平衡二叉樹。
最終返回只有兩種情況,一種是樹的深度,另一種是-1。
相當於是在 劍指 offer 55 - i. 二叉樹的深度 進行的過程中得到了本題的解。
/*** definition for a binary tree node.
* public class treenode
* } */
class
solution
//後序遍歷加剪枝,實現從底向上返回高度
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迭...