LeetCode 104.二叉树的最大深度(DFS、BFS)

上一篇博客:LeetCode 35. 搜索插入位置(二分查找)

 写在前面:大家好!我是ACfun,我的昵称来自两个单词Acceptedfun。我是一个热爱ACM的蒟蒻。最近萌生了刷LeetCode的想法,所以我打算从LeetCode简单的题目开始做起,攻陷LeetCode。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭!
用知识改变命运,用知识成就未来!加油 (ง •̀o•́)ง (ง •̀o•́)ง

原题链接:LeetCode 104.二叉树的最大深度

题目信息

题目描述

 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例

给定二叉树 [3,9,20,null,null,15,7]
题目图例
返回它的最大深度 3

题解

DFS解法

解题思路

 我们可以使用 深度优先搜索(DFS) 来遍历整个二叉树,每次搜索时,只要节点不为空就继续进行遍历,并将深度加 1。当节点为空时说明此时已经遍历到了 叶结点 此时我们比较当前深度和之前记录的深度的最大值并不断更新最大深度即可。当遍历完整个二叉树之后我们得到的就是该二叉树的最大深度。
图解1

解题代码

/**
 * 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 ans = 0;
    int maxDepth(TreeNode* root) {
        if (!root) return 0;
        dfs(root, 0);
        return ans;
    }

    void dfs(TreeNode* node, int depth) {
        if (!node) {
            ans = max(ans, depth);
        } else {
            dfs(node->left, depth + 1);
            dfs(node->right, depth + 1);
        }
    }
};

时间复杂度

 因为要遍历完整个二叉树,假设遍历的二叉树的节点数为 n,那么时间复杂度为 O(n)

提交结果

提交结果

BFS解法

解题思路

 我们也可以使用 宽度优先搜索(BFS) 来解决这个问题。同样也是搜索整个二叉树,此时就是按照层来遍历整个二叉树,所以我们只需要在最后返回最后遍历的二叉树的层数即可。
图解2

解题代码

/**
 * 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 ans = 0;
    int maxDepth(TreeNode* root) {
        if (root == NULL) return 0;
        bfs(root);
        return ans;
    }

    void bfs(TreeNode* root) {
        queue<TreeNode*> q;
        q.push(root);
        while (!q.empty()) {
            int size = q.size();
            while (size--) {
                TreeNode* node = q.front();
                q.pop();
                if (node->left) q.push(node->left);
                if (node->right) q.push(node->right);
            }
            ans++;  
        }
    }
};

时间复杂度

 与BFS解法一样,DFS也要遍历完整个二叉树,所以时间复杂度也为 O(n)

提交结果

题解结果


未完待续,持续更新中……
冲鸭!

©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页