日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字节跳动面试题(编程题)—平衡二叉树(思路+代码)—力扣110

發布時間:2024/1/1 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字节跳动面试题(编程题)—平衡二叉树(思路+代码)—力扣110 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目要求:

思路:求平衡二叉樹,就要先求出樹的左右子樹的高度(創建一個方法),然后判斷是否滿足平衡二叉樹條件(另一個方法),但是這種O(n)達到了n^2 因為在求高度的時候就可能已經出現了不平衡(遍歷一遍),但是得在判斷時候為平衡二叉樹的時候才能找到不平衡(遍歷兩邊),遍歷了兩次達到了n^2,在面試中時不會通過的,所以我們可以在計算高度的時候就判斷是否滿足條件,這樣就達到了時間復雜度是n,只遍歷一遍。

1.創建一個方法用來計算左右子樹的高度,為平衡樹的時候才會返回高度,否則返回-1.
ps:Math.abs計算絕對值 Math.max計算最大值

public int maxDepth(TreeNode root) {if(root == null){return 0;}int leftH = maxDepth(root.left);//接收返回值 為-1時不再判斷是否為平衡二叉樹,會一直返回-1.int rightH = maxDepth(root.right);if(leftH >=0 && rightH >=0 && Math.abs(leftH - rightH) <= 1){return Math.max(leftH,rightH)+1;//+1返回的是根節點的高度,可以想象根節點左右子樹為空時0+0+1}else{//不是平衡二叉樹return -1;}

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。