• LeetCode-104-二叉树的最大深度


    LeetCode-104-二叉树的最大深度

    题目

    给定一个二叉树,找出其最大深度。

    二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

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

    示例:
    给定二叉树 [3,9,20,null,null,15,7],
    
        3
       / 
      9  20
        /  
       15   7
    

    思路

    这道题属于简单题,考察DFS,首先我尝试通过栈和递归两个方法来做来完成;

    首先考虑用栈:

    由于给定的二叉树数据结构不包括深度,于是我另外构造一个结构体,把节点和深度放进去;

    每次从栈中取出一个节点,然后把左右子节点放进去,深度+1,

    最后返回深度最大的结果即可。效果还不错。

    然后用递归:

    递归的代码量就少很多了,如果自己水平在高一点那么还能更加精简;

    递归调用dfs,遍历树的每一个节点,将深度作为参数传进去,然后获取最大的深度即可。

    代码(递归)

    class Solution {
    public:
        int deep = 1;
        void dfs(TreeNode* node, int d) {
            if (!node) return;
            deep = max(deep, d);
            dfs(node->left, d+1);
            dfs(node->right, d+1);
        }
        int maxDepth(TreeNode* root) {
            if (!root) return 0;
            dfs(root, 1);
            return deep;
        }
    };
    

    代码(栈)

     struct NewNode {
         TreeNode *node;
         int deep;
         NewNode(TreeNode* t, int d) : deep(d), node(t) {}
     };
    class Solution {
    public:
        int maxDepth(TreeNode* root) {
            if (!root) return 0;
            stack<NewNode*> S;
            int res = 1;
            NewNode *node = new NewNode(root, 1);
            S.push(node);
            while (!S.empty()) {
                NewNode *top = S.top(); S.pop();
                res = max(res, top->deep);
                if (top->node->left) {
                    NewNode *leftNode =  new NewNode(top->node->left, top->deep+1);
                    S.push(leftNode);
                }
                if (top->node->right) {
                    NewNode *rightNode = new NewNode(top->node->right, top->deep+1);
                    S.push(rightNode);
                }
            }
            return res;
        }
    };
    
  • 相关阅读:
    单词统计
    学习进度_第十周
    学习进度_第九周
    典型用户、场景分析
    一维数组4.25
    《构建之法》阅读笔记03
    学习进度_第八周
    《构建之法》阅读笔记02
    夏壹队——nabcd
    个人作业阶段二 4
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13080532.html
Copyright © 2020-2023  润新知