二叉樹---深度
很基本的問題,依舊從遞迴遍歷或者層次廣度優先遍歷做起;
遞迴法
本題其實也要後序遍歷(左右中),依然是因為要通過遞迴函式的返回值做計算樹的高度。
按照遞迴三部曲,來看看如何來寫。
確定遞迴函式的引數和返回值:引數就是傳入樹的根節點,返回就返回這棵樹的深度,所以返回值為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/
相關文章
- 二叉樹深度二叉樹
- 二叉樹的深度二叉樹
- 二叉樹的子結構、深度以及重建二叉樹二叉樹
- 【劍指offer】二叉樹深度二叉樹
- 二叉樹的最大深度和最小深度二叉樹
- JZ-038-二叉樹的深度二叉樹
- 二叉樹的最大/最小深度二叉樹
- 二叉樹的深度、寬度遍歷及平衡樹二叉樹
- Python二叉樹的三種深度Python二叉樹
- 二叉樹的最小深度問題二叉樹
- 每日一練(27):二叉樹的深度二叉樹
- 劍指Offer-40-二叉樹的深度二叉樹
- 劍指offer——二叉樹的深度C++二叉樹C++
- 《劍指offer》:[39]求解二叉樹的深度二叉樹
- Maximum Depth of Binary Tree 二叉樹的深度二叉樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- [每日一題] 第八題:二叉樹的深度每日一題二叉樹
- [每日一題] 第三題:二叉樹的深度每日一題二叉樹
- 劍指offer | 55 - I. 二叉樹的深度二叉樹
- 111. 二叉樹的最小深度二叉樹
- 111. 二叉樹的最小深度(***)二叉樹
- 資料結構實驗之二叉樹八:(中序後序)求二叉樹的深度資料結構二叉樹
- 洛谷題單指南-二叉樹-P4913 【深基16.例3】二叉樹深度二叉樹
- 二叉樹 & 二叉查詢樹二叉樹
- Python教程講解二叉樹的三種深度Python二叉樹
- LeetCode 104.二叉樹的最大深度LeetCode二叉樹
- [java]二叉樹構建、遍歷、深度、平衡性Java二叉樹
- 遞迴求解二叉樹任意一結點的深度遞迴二叉樹
- 二叉樹的廣度遍歷和深度遍歷()二叉樹
- 排序二叉樹和平衡二叉樹排序二叉樹
- 二叉查詢樹(二叉排序樹)排序
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- 程式碼隨想錄 第十六天 | ● 104.二叉樹的最大深度 559.n叉樹的最大深度 ● 111.二叉樹的最小深度 ● 222.完全二叉樹的節點個數二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- leetcode 111 二叉樹的最小深度LeetCode二叉樹
- 二叉樹的最小高度,最大高度(深度)和寬度二叉樹
- 二叉樹二叉樹
- [Golang]力扣Leetcode—初級演算法—樹—二叉樹的最大深度Golang力扣LeetCode演算法二叉樹