日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2024/1/1 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字节跳动面试题(编程题)—平衡二叉树(思路+代码)—力扣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的全部內容,希望文章能夠幫你解決所遇到的問題。

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