开始cpp刷题之旅。
依旧是追求耗时0s的一天。
给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:3
示例 2:
输入:root = [1,null,2]
输出:2
思路:
二叉树的这些题目,用递归做永远都是最简单的方法。
解法一:DFS
class Solution {
public:
int maxDepth(TreeNode* root) {
if(!root) return 0;
return max(maxDepth(root->left),maxDepth(root->right))+1;
}
};
首先,如果节点为空直接返回0
然后就遍历完左节点,再遍历右节点,取其大的值加上根节点即为最大深度。
解法二:BFS
当然也可以使用层级遍历,不过这种写起来较递归麻烦。
思路如下:
先看节点是否为空,如果为空,则返回0。
再看每一层节点。只要某一层右节点,我就往tmp里面推值,并且把层级加1。
注意,while终止的条件是que为空,放在这里也就是tmp为空的时候。也就是说当某一层的左右节点都为空时,tmp为空,que也就为空,因此循环终止。
注意这里的tmp要写在循环里面。
class Solution {
public:
int maxDepth(TreeNode* root) {
if (root == nullptr) return 0;
vector<TreeNode*> que;
que.push_back(root);
int res = 0;
while (!que.empty()) {
vector<TreeNode*> tmp;
for(TreeNode* node : que) {
if (node->left != nullptr) tmp.push_back(node->left);
if (node->right != nullptr) tmp.push_back(node->right);
}
que = tmp;
res++;
}
return res;
}
};