C++ 之LeetCode刷题记录(十八)

开始cpp刷题之旅。

依旧是追求耗时0s的一天。

在这里插入图片描述

104. 二叉树的最大深度

给定一个二叉树 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;
    }
};

你可能感兴趣的:(c++,数据结构,c++,leetcode,深度优先)