題目
給定一個二叉樹,找出其最大深度。
二叉樹的深度爲根節點到最遠葉子節點的最長路徑上的節點數。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定二叉樹 [3,9,20,null,null,15,7](示例圖已省略,可點擊頂部標題查看原題),返回它的最大深度 3 。
解法1:迭代法
-
解題思路
迭代法的實現和層序遍歷相似,每遍歷完一層,深度+1,當遍歷完成時便可得到最大深度。
和層序遍歷不同的是,需要記錄下一層的節點個數 levelSize,當 levelSize 爲 0 時,則意味着已遍歷完一層,深度+1。 -
代碼
class Solution {
/**
* 迭代法
*/
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
// 每層的節點個數
int levelSize = 1;
int maxDepth = 0;
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
levelSize--;
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
// 遍歷完一層,最大深度+1,並設置下一層的節點個數
if (levelSize == 0) {
levelSize = queue.size();
maxDepth++;
}
}
return maxDepth;
}
}
遞歸法
-
解題思路
分別遞歸遍歷左右子樹,因爲不一定是滿二叉樹,所以需要比較左右子樹。 -
代碼
class Solution {
/**
* 遞歸法
*/
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
}
}