力扣104 二叉樹的最大深度

2021-10-19 07:25:05 字數 1795 閱讀 4567

給定乙個二叉樹,找出其最大深度。

二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。

說明: 葉子節點是指沒有子節點的節點。

示例:給定二叉樹 [3,9,20,null,null,15,7],

返回它的最大深度 3 。遞迴計算左右子樹的高度,樹的高度等於左右子樹的最大高度加一

1 /**

2 * definition for a binary tree node.

3 * public class treenode

8 * }

9 */

10 class solution

15 // 遞迴計算左右子樹的高度,樹的高度等於左右子樹的最大高度加一

16 int leftdep = maxdepth(root.left);

17 int rightdep = maxdepth(root.right);

18 return math.max(leftdep, rightdep) + 1;

19 }

20 }

力扣測試時間為0ms, 空間為39.5mb, 這種演算法簡單高效

時間複雜度:需要對每個結點進行訪問,所以時間複雜度為o(n)

空間複雜度:o(h), h最大為n(當樹退化成煉表時),所以空間複雜度為o(n), 在最好的情況下,也就是樹是平衡的,這樣數的高度就是o(logn), 此時空間複雜度就為o(logn)

1. 外層迴圈每次迭代一層

2. 內層迴圈彈出該層的所有結點,入隊下一層的所有結點

1 // bfs計算深度

2 class solution

7 queuequeue = new linkedlist<>();

8 queue.offer(root);

9 int dept = 0;

10 while(!queue.isempty())

21 }

22 return dept;

23 }

24 }

力扣測試時間為:1ms, 空間為37.7mb

時間複雜度:對每個結點進行了一次遍歷,所以時間複雜度為o(n)

空間複雜度:空間複雜度就是佇列的大小,佇列儲存的是一層的結點,最壞情況下,只有兩層,這樣空間複雜度就為o(n/2), 也就是o(n)

用乙個pair來表示乙個結點,integer表示該結點的高度,將這樣的結點存入queue中,這樣每次獲得結點的同時都能獲得該結點的高度

1 class solution 

6 queue> queue = new linkedlist<>();

7 queue.offer(new pair(root, 1));

8 int dept = 0;

9 while(!queue.isempty())

22 }

23 return dept;

24 }

25 }

力扣測試的時間為:3ms, 空間為 39.3mb, 是三種方法中的最慢的一種

空間複雜度和時間複雜度都為o(n)

力扣 104 二叉樹的最大深度

一 題目描述 給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最大深度 3 二 解題思路 求二叉樹深度 max 左子樹最大深度,右...

力扣 104 二叉樹的最大深度

題目 給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最大深度 3 題解 definition for a binary tree...

力扣題解 104 二叉樹的最大深度

給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回它的最大深度 3 分析這個問題,我們可以採用divide and conquer思想.分...