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

算法之二叉树

102. 二叉树的层序遍历 - 力扣(LeetCode)

一 DFS和BFS

1.1 DFS

#include <iostream>// 二叉树节点的定义
struct TreeNode {int val;               // 节点值TreeNode *left;        // 左子树指针TreeNode *right;       // 右子树指针// 构造函数TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};// DFS遍历函数(后序遍历:先左子树,再右子树)
void dfs(TreeNode* root) {if (root == nullptr) {  // 若节点为空,直接返回return;}dfs(root->left);        // 递归遍历左子树dfs(root->right);       // 递归遍历右子树// 此处可添加对当前节点的处理逻辑,如:// std::cout << root->val << " ";
}

1.2 BFS

// BFS遍历函数(层序遍历)
void bfs(TreeNode* root) {if (root == nullptr) {  // 处理空树情况return;}std::queue<TreeNode*> queue;  // C++中使用std::queue,存储节点指针queue.push(root);             // 将根节点入队while (!queue.empty()) {      // 队列不为空时循环TreeNode* node = queue.front();  // 获取队首元素(C++的front()对应Java的peek())queue.pop();                     // 移除队首元素(C++的pop()仅移除不返回,对应Java的poll())// 处理当前节点(根据需求添加逻辑,如打印节点值)// std::cout << node->val << " ";// 左子节点不为空则入队if (node->left != nullptr) {queue.push(node->left);}// 右子节点不为空则入队if (node->right != nullptr) {queue.push(node->right);}}
}

二 二叉树层序遍历

class Solution {
public:std::vector<std::vector<int>> levelOrder(TreeNode* root) {std::vector<std::vector<int>> res;  // 存储最终结果if (root == nullptr) {  // 空树直接返回空结果return res;}std::queue<TreeNode*> q;  // 队列用于存储待处理的节点q.push(root);             // 根节点入队while (!q.empty()) {int n = q.size();  // 当前层的节点数量std::vector<int> level;  // 存储当前层的节点值// 处理当前层的所有节点for (int i = 0; i < n; ++i) {TreeNode* node = q.front();  // 获取队首节点q.pop();                     // 移除队首节点level.push_back(node->val);  // 将当前节点值加入当前层// 左子节点不为空则入队if (node->left != nullptr) {q.push(node->left);}// 右子节点不为空则入队if (node->right != nullptr) {q.push(node->right);}}res.push_back(level);  // 将当前层加入结果集}return res;
}
};

【1】将当前层的node全部弹出,q.front()

【2】res是vector<vetor<int>>,每一层用一个vector<int>装

http://www.dtcms.com/a/366724.html

相关文章:

  • 不用服务器也能监控网络:MyIP+cpolar让中小企业告别昂贵方案
  • Wisdom SSH 是一款集成了强大 AI 助手功能的 SSH 工具,助你高效管理服务器。
  • 以OWTB为核心的三方仓运配一体化平台架构设计文档V0.1
  • 【软件测试】第1章 认识测试
  • Qt实现2048小游戏:看看AI如何评估棋盘策略实现“人机合一
  • OPENCV复习第二期
  • .NET GcPDF V8.2 新版本:人工智能 PDF 处理
  • Lucene 8.7.0 版本的索引文件格式
  • 学习资料1(粗略版)
  • android View详解—自定义ViewGroup,流式布局
  • Android 项目:画图白板APP开发(三)——笔锋(多 Path 叠加)
  • MySQL主从复制之进阶延时同步、GTID复制、半同步复制完整实验流程
  • Html重绘和重排
  • 25高教社杯数模国赛【C题国一学长思路+问题分析】
  • 观测云产品更新 | LLM 监测、查看器、事件中心、监控等
  • void*指针类型转换笔记
  • SpringBoot中 Gzip 压缩的两种开启方式:GeoJSON 瘦身实战
  • k8s基础(未完待续)
  • 拜占庭攻击与投毒攻击
  • Linux编写shell脚本,输入多个原文件名和新文件名,一次对多个文件重命名
  • 2025亚马逊卖家防恶搞指南:揪出恶意套路,3招守住店铺安全
  • Gmail 数据泄露安全警报以及启示
  • 23种设计模式——抽象工厂模式(Abstract Factory Pattern)详解
  • C++开发中的常用设计模式:深入解析与应用场景
  • Nginx 实战系列(一)—— Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装
  • 移远EC200A OpenCPU笔记
  • 【bash】命令查看当前目录下文件个数
  • STM32G4 速度环开环,电流环闭环 IF模式建模
  • 发票、收据合并 PDF 小程序,报销上传 3 秒搞定
  • Beautiful.ai:AI辅助PPT工具高效搞定排版,告别熬夜做汇报烦恼