劍指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-40-二叉樹的深度二叉樹
- 劍指offer——二叉樹的深度C++二叉樹C++
- 劍指 Offer 32 - I. 從上到下列印二叉樹(java解題)二叉樹Java
- 劍指offer——重建二叉樹二叉樹
- 劍指offer(四)重建二叉樹二叉樹
- 【劍指offer】27. 二叉樹的映象二叉樹
- 劍指offer——二叉樹的映象C++二叉樹C++
- 劍指 Offer 07. 重建二叉樹二叉樹
- [劍指offer] 把二叉樹列印成多行二叉樹
- 【劍指offer】5.二叉樹的映象和列印二叉樹
- 力扣 - 劍指 Offer 27. 二叉樹的映象力扣二叉樹
- # 劍指 Offer 68 - II. 二叉樹的最近公共祖先二叉樹
- [劍指offer] 二叉搜尋樹的後序遍歷序列
- leetcode 102 劍指Offer 32 二叉樹的層次遍歷LeetCode二叉樹
- 劍指offer--把二叉樹列印成多行(C++)二叉樹C++
- 《劍指offer》之在完全二叉樹中新增子節點二叉樹
- 劍指offer——從上往下列印二叉樹C++二叉樹C++
- 劍指 Offer 14- I. 剪繩子 JavaScript實現JavaScript
- 劍指 Offer 10- I. 斐波那契數列
- 劍指 Offer 32 - III. 從上到下列印二叉樹 III二叉樹
- 力扣 - 劍指 Offer 58 - I. 翻轉單詞順序力扣
- 劍指 Offer 33. 二叉搜尋樹的後序遍歷序列
- 劍指 Offer 34. 二叉樹中和為某一值的路徑二叉樹
- LeetCode 劍指offer——從上到下列印二叉樹 II、從上到下列印二叉樹 IIILeetCode二叉樹
- 力扣 - 劍指 Offer 59 - I. 滑動視窗的最大值力扣
- 劍指 Offer 56 - I. 陣列中數字出現的次數陣列
- 劍指offer-17:樹的子結構
- 劍指 Offer 54. 二叉搜尋樹的第k大節點 mark
- (python版)《劍指Offer》JZ57:二叉樹的下一個結點Python二叉樹
- 劍指offer(java實現)第4題“重建二叉樹”-牛客網Java二叉樹
- 【劍指offer】【4】根據前序和中序結果,重建二叉樹二叉樹
- 力扣 - 劍指 Offer 54. 二叉搜尋樹的第k大節點力扣
- 劍指OFFER
- 劍指offer 面試題 7 :二叉樹的下一個節點是什麼?面試題二叉樹
- 每日一題 - 劍指 Offer 54. 二叉搜尋樹的第k大節點每日一題
- 劍指 Offer 34. 二叉樹中和為某一值的路徑(java解題)二叉樹Java
- (python版)《劍指Offer》JZ24:二叉樹中和為某一值的路徑Python二叉樹
- PHPer面試必看:分門別類帶你擼《劍指Offer》之二叉樹PHP面試二叉樹