首页 > 其他分享 >[LeetCode Hot 100] LeetCode104. 二叉树的最大深度

[LeetCode Hot 100] LeetCode104. 二叉树的最大深度

时间:2023-12-27 18:15:07浏览次数:40  
标签:node right TreeNode val int LeetCode104 Hot 二叉树 left

题目描述

思路

熟练掌握二叉树的遍历算法

方法一:层序遍历(迭代)+计数

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) return 0;
        Deque<TreeNode> queue = new ArrayDeque<>();
        queue.offer(root);
        int level = 0;
        while (!queue.isEmpty()) {
            int size = queue.size();
            for (int i = 0; i < size; i ++) {
                TreeNode node = queue.poll();
                if (node.left != null) queue.offer(node.left);
                if (node.right != null) queue.offer(node.right);
            }
            level += 1;
        }
        return level;
    }
}

方法二:前序遍历(迭代)

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int maxDepth(TreeNode root) {
        Deque<Node> stack = new ArrayDeque<>();
        if (root == null) return 0;
        stack.push(new Node(root, 1));
        int res = 0;
        while (!stack.isEmpty()) {
            Node node = stack.pop();
            TreeNode curNode = node.node;
            int depth = node.depth;
            res = Math.max(res, depth);
            if (curNode.right != null) stack.push(new Node(curNode.right, depth + 1)); 
            if (curNode.left != null) stack.push(new Node(curNode.left, depth + 1));   
        }
        return res;
    }
}
class Node {
    TreeNode node;
    int depth;
    Node(TreeNode node, int depth) {
        this.node = node;
        this.depth = depth;
    }
}

方法三:前序遍历(递归)

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    private int res = 0;
    public int maxDepth(TreeNode root) {
        dfs(root, 1);
        return res;
    }
    private void dfs(TreeNode node, int depth) {
        if (node == null) return;
        res = Math.max(res, depth);
        dfs(node.left, depth + 1);
        dfs(node.right, depth + 1);
    }
}

方法四:DFS-自底向上

当前节点的深度 = Max(左子树的最大深度,右子树的最大深度) + 1

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int maxDepth(TreeNode root) {
        return postOrder(root);
    }
    private int postOrder(TreeNode node) {
        if (node == null) return 0;
        int leftMaxDepth = postOrder(node.left);
        int rightMaxDepth = postOrder(node.right);
        // 处理根节点
        return Math.max(leftMaxDepth, rightMaxDepth) + 1;
    }
}

标签:node,right,TreeNode,val,int,LeetCode104,Hot,二叉树,left
From: https://www.cnblogs.com/keyongkang/p/17931115.html

相关文章

  • [LeetCode Hot 100] LeetCode110. 平衡二叉树
    题目描述思路LeetCode104.二叉树的最大深度变种方法一:后序遍历(递归、dfs)/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.......
  • [LeetCode Hot 100] LeetCode111. 二叉树的最小深度
    题目描述思路二叉树的最小深度就是第一个叶子节点所在的层数方法一:前序遍历(递归、dfs)/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intva......
  • [LeetCode Hot 100] LeetCode94. 二叉树的中序遍历
    题目描述思路熟练掌握迭代和递归的代码。递归:额外写一个函数voidinOrder(TreeNodenode,Listres)迭代:令cur=root,一直往左子树找,找到最后一个左子节点,当cur为空,就开始处理栈顶元素(将栈顶元素加入结果集),随后将cur设置为右子节点,继续执行以上操作。方法一:递归/***......
  • [LeetCode Hot 100] LeetCode144. 二叉树的前序遍历
    题目描述思路熟练掌握迭代和递归的代码。递归代码:额外写一个函数voidpreOrder(TreeNodenode,Listres)迭代代码:会用到数据结构——栈。先入栈当前节点的右子节点,再入栈左子节点。方法一:递归/***Definitionforabinarytreenode.*publicclassTreeNode{*......
  • [LeetCode Hot 100] LeetCode145. 二叉树的后序遍历
    题目描述思路递归:额外写一个函数voidpostOrder(TreeNodenode,Listres)迭代:前序遍历:根---左---右将前序遍历改造成:根---右---左然后反转根右左为:左---右---根,即为后序遍历优化一下:while(!stack.isEmpty()){ TreeNodenode=stack.pop(); res.addFirst(node.......
  • 代码随想录算法训练营第十四天 | 二叉树理论基础,递归遍历,分别迭代遍历, 统一迭代遍历
    一、二叉树理论基础学习:1.从二叉树是否包含数值进行分类:无数值:完全二叉树和满二叉树有数值的:二叉搜索树和平衡二叉搜索树(AVL,Adelson-VelskyandLandis)。其中二叉搜索树指数值按照从小到大的顺序是左子树<根结点<右子树,平衡指的是左右子树高度差不超过12.二叉树存......
  • 二叉树路径总和系列问题
    二叉树路径总和系列问题作者:Grey原文地址:博客园:二叉树路径总和系列问题CSDN:二叉树路径总和系列问题LeetCode112.路径总和定义递归函数booleanprocess(TreeNodenode,intpreSum,inttarget)递归含义表示:从node节点一直到树的叶子节点,preSum表示node之前的节点......
  • GPT-3《Language Models are Few-Shot Learners》解读
    GPT-3和GPT-2差别1. 效果上,超出GPT-2非常多,能生成人类难以区分的新闻文章;2. 主推few-shot,相比于GPT-2的zero-shot,具有很强的创新性;3. 模型结构略微变化,采用sparseattention模块;4. 海量训练语料 45TB(清洗后570GB),相比于GPT-2的40GB;5. 海量模型参数,最大模型为......
  • 算法题:剑指 Offer 07. 重建二叉树(题目+思路+代码+注释)时空时间优先选O(N) O(N) 2ms击
    题目剑指Offer07.重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例1:Input:preorder=[3,9,20,15,7],inorder=[9,3,15,20,7]Output:[3,9,20,null,null,15,7]示例2:Input:......
  • 树与二叉树与森林
    2、若将一棵树T转化为对应的二叉树BT,则下列对BT的遍历中,其遍历序列与T的后根遍历序列相同的是______。A.先序遍历B.中序遍历C.后序遍历D.按层遍历解析:在后根遍历(也称为后序遍历或后序遍历)中,对于T的每个节点,首先遍历其左子树,然后遍历其右子树,最后访问该节点本身。而在中根......