二叉樹---深度
很基本的問題,依舊從遞迴遍歷或者層次廣度優先遍歷做起;
遞迴法
本題其實也要後序遍歷(左右中),依然是因為要通過遞迴函式的返回值做計算樹的高度。
按照遞迴三部曲,來看看如何來寫。
確定遞迴函式的引數和返回值:引數就是傳入樹的根節點,返回就返回這棵樹的深度,所以返回值為int型別。
程式碼如下:
int getDepth(TreeNode* node)
確定終止條件:如果為空節點的話,就返回0,表示高度為0。
程式碼如下:
if (node == NULL) return 0;
確定單層遞迴的邏輯:先求它的左子樹的深度,再求的右子樹的深度,最後取左右深度最大的數值 再+1 (加1是因為算上當前中間節點)就是目前節點為根節點的樹的深度。
程式碼如下:
class Solution {
public:
int getDepth(TreeNode* node) {
if (node == NULL) return 0;
int leftDepth = getDepth(node->left); // 左
int rightDepth = getDepth(node->right); // 右
int depth = 1 + max(leftDepth, rightDepth); // 中
return depth;
}
int maxDepth(TreeNode* root) {
return getDepth(root);
}
};
作者:carlsun-2
連結:https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof/solution/qiu-shu-de-zui-da-shen-du-xiang-jie-by-carlsun-2-3/
迭代法
使用迭代法的話,使用層序遍歷是最為合適的,因為最大的深度就是二叉樹的層數,和層序遍歷的方式極其吻合。
在二叉樹中,一層一層的來遍歷二叉樹,記錄一下遍歷的層數就是二叉樹的深度,如圖所示:
所以這道題的迭代法就是一道模板題,可以使用二叉樹層序遍歷的模板來解決的。
class Solution {
public:
int maxDepth(TreeNode* root) {
if (root == NULL) return 0;
int depth = 0;
queue<TreeNode*> que;
que.push(root);
while(!que.empty()) {
int size = que.size();
depth++; // 記錄深度
for (int i = 0; i < size; i++) {
TreeNode* node = que.front();
que.pop();
if (node->left) que.push(node->left);
if (node->right) que.push(node->right);
}
}
return depth;
}
};
作者:carlsun-2
連結:https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof/solution/qiu-shu-de-zui-da-shen-du-xiang-jie-by-carlsun-2-3/
相關文章
- 二叉樹深度二叉樹
- 二叉樹的深度二叉樹
- 二叉樹的最大深度和最小深度二叉樹
- 二叉樹的子結構、深度以及重建二叉樹二叉樹
- 二叉樹的最大/最小深度二叉樹
- 二叉樹的最大深度20201231二叉樹
- 程式碼隨想錄day14 || 226 翻轉二叉樹,101 對稱二叉樹, 104 二叉樹的最大深度, 111 二叉樹的最小深度二叉樹
- 111. 二叉樹的最小深度(***)二叉樹
- 111. 二叉樹的最小深度二叉樹
- 104. 二叉樹的最大深度二叉樹
- JZ-038-二叉樹的深度二叉樹
- 二叉樹的最小深度問題二叉樹
- Python二叉樹的三種深度Python二叉樹
- leetcode 111 二叉樹的最小深度LeetCode二叉樹
- Day16 | 104.二叉樹的最大深度 、111.二叉樹的最小深度 、222.完全二叉樹的節點個數二叉樹
- 二叉樹的深度、寬度遍歷及平衡樹二叉樹
- LeetCode 104.二叉樹的最大深度LeetCode二叉樹
- 「leetcode」111.二叉樹的最小深度LeetCode二叉樹
- LeeCode-104. 二叉樹的最大深度二叉樹
- 洛谷 P4913 二叉樹深度二叉樹
- 每日一練(27):二叉樹的深度二叉樹
- 劍指Offer-40-二叉樹的深度二叉樹
- 劍指offer——二叉樹的深度C++二叉樹C++
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 程式碼隨想錄 第十六天 | ● 104.二叉樹的最大深度 559.n叉樹的最大深度 ● 111.二叉樹的最小深度 ● 222.完全二叉樹的節點個數二叉樹
- [每日一題] 第八題:二叉樹的深度每日一題二叉樹
- [每日一題] 第三題:二叉樹的深度每日一題二叉樹
- Python教程講解二叉樹的三種深度Python二叉樹
- 劍指offer | 55 - I. 二叉樹的深度二叉樹
- 洛谷題單指南-二叉樹-P4913 【深基16.例3】二叉樹深度二叉樹
- 資料結構實驗之二叉樹八:(中序後序)求二叉樹的深度資料結構二叉樹
- 程式碼隨想錄演算法訓練營day16 | leetcode 104. 二叉樹的最大深度、559. N 叉樹的最大深度、111. 二叉樹的最小深度、222. 完全二叉樹的節點個數演算法LeetCode二叉樹
- [Golang]力扣Leetcode—初級演算法—樹—二叉樹的最大深度Golang力扣LeetCode演算法二叉樹
- LeetCode每日一題:二叉樹的最大深度(No.104)LeetCode每日一題二叉樹
- 排序二叉樹和平衡二叉樹排序二叉樹
- 程式碼隨想錄演算法訓練營第十四天|leetcode226. 翻轉二叉樹、leetcode101.對稱二叉樹、leetcode104.二叉樹的最大深度、leetcode111.二叉樹的最小深度演算法LeetCode二叉樹
- 程式碼隨想錄演算法訓練營第十四天| 226.翻轉二叉樹 、101. 對稱二叉樹、104.二叉樹的最大深度 (優先掌握遞迴)、111.二叉樹的最小深度演算法二叉樹遞迴
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹