当前位置: 首页 > 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;
    }
}

相关文章:

  • 【股票数据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的作用
  • 潍坊外贸网站制作/软件开发交易平台
  • 简述网站建设优劣的评价标准/杭州seo建站
  • 建筑方案设计考试/seo网站快速排名软件
  • 茂名公司网站设计/黑帽seo技术培训
  • 本地网站建设多少钱/软文写作的基本要求
  • 零基础做网站教程/各类资源关键词