首页 > 其他分享 >[LeetCode Hot 100] LeetCode102. 二叉树的层序遍历

[LeetCode Hot 100] LeetCode102. 二叉树的层序遍历

时间:2023-12-27 18:15:55浏览次数:44  
标签:node right TreeNode val int res 层序 Hot 二叉树

题目描述

思路

方法一:递归

/**
 * 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 List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        level(root, 0, res);
        return res;
    }
    private void level(TreeNode node, int curLevel, List<List<Integer>> res) {
        if (node == null) return;
        if (res.size() == curLevel) {
            List<Integer> list = new ArrayList<>();
            list.add(node.val);
            res.add(list);
        } else {
            res.get(curLevel).add(node.val);
        }
        level(node.left, curLevel + 1, res);
        level(node.right, curLevel + 1, res);
    }
}
class Node{
    TreeNode node;
    int level;
    Node (TreeNode node, int level) {
        this.node = node;
        this.level = 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 List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        Deque<TreeNode> queue = new ArrayDeque<>();

        if (root == null) return res;
        queue.offer(root);
        while (!queue.isEmpty()) {
            List<Integer> level = new ArrayList<>();
            int size = queue.size();
            for (int i = 0; i < size; i ++) {
                TreeNode node = queue.poll();
                level.add(node.val);
                if (node.left != null) queue.offer(node.left);
                if (node.right != null) queue.offer(node.right);
            }
            res.add(level);
        }
        return res;
     }
}

标签:node,right,TreeNode,val,int,res,层序,Hot,二叉树
From: https://www.cnblogs.com/keyongkang/p/17931113.html

相关文章

  • [LeetCode Hot 100] LeetCode543. 二叉树的直径
    题目描述思路所谓二叉树的直径,就是左右子树的最大深度之和。方法一:/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=va......
  • [LeetCode Hot 100] LeetCode104. 二叉树的最大深度
    题目描述思路熟练掌握二叉树的遍历算法方法一:层序遍历(迭代)+计数/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=val;......
  • [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. 海量模型参数,最大模型为......