字节跳动面试题(编程题)—平衡二叉树(思路+代码)—力扣110
生活随笔
收集整理的這篇文章主要介紹了
字节跳动面试题(编程题)—平衡二叉树(思路+代码)—力扣110
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目要求:
思路:求平衡二叉樹,就要先求出樹的左右子樹的高度(創建一個方法),然后判斷是否滿足平衡二叉樹條件(另一個方法),但是這種O(n)達到了n^2 因為在求高度的時候就可能已經出現了不平衡(遍歷一遍),但是得在判斷時候為平衡二叉樹的時候才能找到不平衡(遍歷兩邊),遍歷了兩次達到了n^2,在面試中時不會通過的,所以我們可以在計算高度的時候就判斷是否滿足條件,這樣就達到了時間復雜度是n,只遍歷一遍。
1.創建一個方法用來計算左右子樹的高度,為平衡樹的時候才會返回高度,否則返回-1.
ps:Math.abs計算絕對值 Math.max計算最大值
2.接收maxDepth的返回值,如果為正,說明有高度,返回true
public boolean isBalanced(TreeNode root) {if(root == null){//空樹也是平衡二叉樹return true;}return maxDepth(root) > 0;}完整代碼👇
class Solution {public int maxDepth(TreeNode root) {if(root == null){return 0;}int leftH = maxDepth(root.left);int rightH = maxDepth(root.right);if(leftH >=0 && rightH >=0 && Math.abs(leftH - rightH) <= 1){return Math.max(leftH,rightH)+1;}else{return -1;}}public boolean isBalanced(TreeNode root) {if(root == null){//空樹也是平衡二叉樹return true;}return maxDepth(root) > 0;} }運行結果:圖①O(n*n) ,圖②O(n)
總結
以上是生活随笔為你收集整理的字节跳动面试题(编程题)—平衡二叉树(思路+代码)—力扣110的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#应用程序如何添加弹出式广告功能
- 下一篇: (附源码)springboot智慧幼儿园