劍指 Offer 55 - I. 二叉樹的深度

知識點:二叉樹,遞迴

題目描述

輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點(含根、葉節點)形成樹的一條路徑,最長路徑的長度為樹的深度。

示例
輸入:root = [4,2,7,1,3,6,9]
輸出:[4,7,2,9,6,3,1]

解法一:遞迴法

函式功能:一個樹的深度

1.終止條件:節點為空,深度為0;

2.該做什麼:當前節點為根的樹深度是左子樹和右子樹深度大的+1;

3.什麼時候做:得知道子樹的深度才能知道當前樹:後序;

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
if(root == null) return 0;
return Math.max(maxDepth(root.left), maxDepth(root.right))+1;
}
}

解法二:層次遍歷(BFS)

利用佇列的結構,一層一層的遍歷;節點不停的出隊入隊,每遍歷一個節點的時候,將其左節點和右節點入隊。

關鍵點:每遍歷一層,則計數器加+1;直到遍歷完成,得到樹的深度。

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
int count = 0;
if(root == null) return 0;
queue.add(root);
while(!queue.isEmpty()){
count++;
int levelNum = queue.size();
for(int i = 0; i < levelNum; i++){
TreeNode front = queue.poll();
if(front.left != null) queue.add(front.left);
if(front.right != null) queue.add(front.right);
}
}
return count;
}
}

相關連結

二叉樹的深度