当前位置: 首页 > news >正文

代码随想录-06-二叉树-05.01 二叉树的层序遍历

二叉树的层序遍历

思路

使用队列来实现对二叉树的节点访问,类似于广度优先遍历。

具体代码

CPP

下面代码的访问顺序只是存在一个数组中,并没有按层访问,
如果要添加每层的顺序那么就是每层里加上vector<int> temp就可以了。

class Solution{
public:
    vector<int> traversal(TreeNode *root){
        queue<TreeNode*> que;
        if(!root)
            return res;
        que.push(root);
        while(!que.empty()){
            // 控制当前递归的个数
            int size = que.size();
            while(size--){
                TreeNode* cur = que.front();
                que.pop();
                if(cur->left)
                    que.push(cur->left);
                if(cur->right)
                    que.push(cur->right);
                res.push_back(cur->val);
            }
        }
        return res;
    }
private :
    vector<int> res;
}

Java

  • 定义一个队列存储每层的元素;
  • 对每层元素:先记录该层元素的个数,然后从左到右依次遍历,并将访问的结果压栈;
  • 每访问一个节点,查找是否有左右孩子。
/**
 * 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 Queue<TreeNode> q = new ArrayDeque<>();
    List<List<Integer>> res = new ArrayList<>();

    public List<List<Integer>> levelOrder(TreeNode root) {
        if (root == null) {
            return res;
        }
        q.add(root);
        while (!q.isEmpty()) {
            List<Integer> temp = new ArrayList<>();
            int size = q.size();
            while (size > 0) {
                TreeNode cur = q.remove();
                if (cur.left != null) {
                    q.add(cur.left);
                }
                if (cur.right != null) {
                    q.add(cur.right);
                }
                size--;
                temp.add(cur.val);
            }
            res.add(temp);
        }
        return res;
    }
}
http://www.dtcms.com/a/127496.html

相关文章:

  • 【股票数据API接口19】如何获取股票主力资金走势数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • 【力扣hot100题】(088)分割等和子集
  • MySQL-多表查询-自连接联合查询子查询
  • Leetcode131:分割回文串——回溯算法
  • 【Linux】线程池与封装线程
  • apijson 快速上手
  • 5.DJI-PSDK:Psdk开发负载与Msdk的应用app进行交互:
  • Spring Boot 常用依赖介绍
  • 什么是自动化测试?
  • 既然安装了WSL2和Ubuntu,那么怎么和windows传递文件(1)
  • Redis安装与基础配置(Windows及linux)
  • 《Vue Router实战教程》22.导航故障
  • 前端工程化:构建高效可维护的现代Web应用
  • 【特权FPGA】之数码管
  • vscode报错:unins000.exe 尝试在目标目录创建文件时发生一个错误
  • Pyside6使用QtWebEngine实现GUI嵌入网页内容
  • 【愚公系列】《Python网络爬虫从入门到精通》047-验证码识别(第三方验证码识别)
  • DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_基础功能示例(CalendarView01_01)
  • 【ESP32-C6】Base on esptool commands to enable Flash Encryption and Secure Boot
  • 5G中的DU和CU的作用
  • 【C++篇】C++模板初阶:从泛型编程到函数模板与类模板的全面解析
  • 【closerAI ComfyUI】nunchaku加持下,FLUX四重控制万物迁移秒出图,晋升生产力工具,开源界福音!收藏学习
  • 如何打通虚拟化-容器环境并保障流量安全?SmartX VCCI 方案升级!
  • Google A2A协议,是为了战略性占领标准?
  • 【端到端】端到端自动驾驶依赖Occupancy进行运动规划?还是可以具有生成局部地图来规划?
  • 在新一代人工智能技术引领下的,相互联系、层层递进的明厨亮灶开源了
  • 加载js/mjs模块时服务器返回的 MIME 类型不对导致模块被拒绝执行
  • DataFrame操作(扩充)
  • 【数据结构】红黑树超详解 ---一篇通关红黑树原理(含源码解析+动态构建红黑树)
  • 用python实现了一个推箱子游戏的环境,后面准备以此为基础实现强化学习。