劍指offer | 55 - I. 二叉樹的深度
題目內容:
輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點(含根、葉節點)形成樹的一條路徑,最長路徑的長度為樹的深度。
例如:
給定二叉樹 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
提示:
節點總數 <= 10000
方法一: DFS深搜也就是樹的後續遍歷,找到左右子樹最深的那個的深度再加上root的1就可以。DFS往往用遞迴或者棧來實現。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int maxDepth(TreeNode* root) {
if(!root) return 0;
return max(maxDepth(root->left),maxDepth(root->right))+1;
}
};
方法二: 層序遍歷,也叫廣搜BFS,往往用佇列與while迴圈實現。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int maxDepth(TreeNode* root) {
if (!root) {
return 0;
}
queue<TreeNode*> bfs;
bfs.push(root);
int res = 0;
while (!bfs.empty()) {
// 第一層迴圈確保當前層還有元素
queue<TreeNode*> temp; // temp 用於儲存當前層的下一層的所有元素
while (!bfs.empty()) {
// 第二層迴圈則是遍歷當前層的所有元素
if (bfs.front() -> left) {temp.push(bfs.front() -> left);}
if (bfs.front() -> right) {temp.push(bfs.front() -> right);}
bfs.pop();
}
++ res; // 層數 +1
bfs = temp; // bfs 更新到當前層的下一層
}
return res;
}
};
相關文章
- 【劍指offer】二叉樹深度二叉樹
- 劍指Offer-40-二叉樹的深度二叉樹
- 劍指offer——二叉樹的深度C++二叉樹C++
- 《劍指offer》:[39]求解二叉樹的深度二叉樹
- 劍指 Offer 32 - I. 從上到下列印二叉樹(java解題)二叉樹Java
- 劍指offer——重建二叉樹二叉樹
- 劍指offer(四)重建二叉樹二叉樹
- 劍指offer——二叉樹的映象C++二叉樹C++
- 【劍指offer】27. 二叉樹的映象二叉樹
- 《劍指offer》:[59]對稱的二叉樹二叉樹
- 劍指 Offer 07. 重建二叉樹二叉樹
- 【劍指offer】判斷二叉樹平衡二叉樹
- [劍指offer] 把二叉樹列印成多行二叉樹
- 《劍指offer》:[62]序列化二叉樹二叉樹
- 【劍指offer】5.二叉樹的映象和列印二叉樹
- 力扣 - 劍指 Offer 27. 二叉樹的映象力扣二叉樹
- 《劍指offer》:[60]把二叉樹列印成多行二叉樹
- 【劍指offer】從上向下列印二叉樹二叉樹
- # 劍指 Offer 68 - II. 二叉樹的最近公共祖先二叉樹
- 《劍指offer》:[58]二叉樹的下一個結點二叉樹
- 劍指offer(C++)——把二叉樹列印成多行C++二叉樹
- 劍指 Offer 14- I. 剪繩子 JavaScript實現JavaScript
- 【劍指offer】樹的子結構
- 【劍指offer】二叉樹中和為某一值的路徑二叉樹
- 劍指offer--把二叉樹列印成多行(C++)二叉樹C++
- 《劍指offer》之在完全二叉樹中新增子節點二叉樹
- 劍指offer——從上往下列印二叉樹C++二叉樹C++
- 《劍指offer》:[61]按之字形順序列印二叉樹二叉樹
- 劍指 Offer 32 - III. 從上到下列印二叉樹 III二叉樹
- 《劍指offer》:[39-1]判斷是否為平衡二叉樹二叉樹
- 劍指 Offer 56 - I. 陣列中數字出現的次數陣列
- 劍指 Offer 34. 二叉樹中和為某一值的路徑二叉樹
- 劍指offer-17:樹的子結構
- 劍指offer面試18 樹的子結構面試
- 《劍指offer》:[55]字元流中第一個不重複的字元字元
- 劍指offer(java實現)第4題“重建二叉樹”-牛客網Java二叉樹
- 【劍指offer】【4】根據前序和中序結果,重建二叉樹二叉樹
- LeetCode 劍指offer——從上到下列印二叉樹 II、從上到下列印二叉樹 IIILeetCode二叉樹