SQL語法總結
阿新 • • 發佈:2020-12-10
1.問題描述
給定一個二叉樹,找出其最大深度。
二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定二叉樹 [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
2.求解
遞迴
程式碼如下
/* 執行用時:0 ms, 在所有 Java 提交中擊敗了100.00% 的使用者 記憶體消耗:38.5 MB, 在所有 Java 提交中擊敗了69.47% 的使用者 */ public int maxDepth(TreeNode root) { if(root == null){ return 0; } int leftHeight = maxDepth(root.left); int rightHeight = maxDepth(root.right); return Math.max(leftHeight,rightHeight) + 1; }
- 時間複雜度:O(n)
- 空間複雜度:O(h),h為二叉樹的最大深度
廣度優先搜尋
-
與一般的廣度優先搜尋有些許不同,我們在佇列裡存放的應該是當前層的所有節點
每次擴充套件下一層時,我們將佇列裡的所有節點都拿出來擴充套件
程式碼如下
/* 執行用時:1 ms, 在所有 Java 提交中擊敗了16.50% 的使用者 記憶體消耗:38.6 MB, 在所有 Java 提交中擊敗了53.41% 的使用者 */ public int maxDepth(TreeNode root) { if (root == null) { return 0; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); int ans = 0; while (!queue.isEmpty()) { int size = queue.size(); while(size > 0) { TreeNode node = queue.poll(); if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } size--; } ans++; } return ans; }
- 時間複雜度、空間複雜度均為O(n)