給定乙個二叉樹,找出其最大深度。
二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。
說明: 葉子節點是指沒有子節點的節點。
示例:給定二叉樹 [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思想.分...