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

算法之二叉树

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.xdnf.cn/news/20032.html

相关文章:

  • 【Python基础】 15 Rust 与 Python 基本类型对比笔记
  • C# 修改基类List中某一元素的子类类型
  • 11 月广州见!AUTO TECH China 2025 汽车内外饰展,解锁行业新趋势
  • Leetcode—3516. 找到最近的人【简单】
  • ORA-12547: TNS:lost contact
  • 算法模板(Java版)_字符串、并查集和堆
  • matlab版本粒子群算法(PSO)在路径规划中的应用
  • PDF批量加盖电子骑缝章的方法!高效办公必备
  • 每天学习一点点之湿敏等级以及肖特基二极管
  • C#之LINQ
  • wps的excel如何转为谷歌在线表格
  • testng.xml
  • Opencv: cv::LUT()深入解析图像块快速查表变换
  • sqlserver2008导入excel表数据遇到的问题
  • 无线路由器:从家庭上网到智慧互联的核心设备
  • 人工智能学习:LR和SVM的联系与区别?
  • AI助力软件UI概念设计:卓伊凡收到的客户设计图引发的思考
  • Node.js轻松生成动态二维码
  • C++对象模型的底层逻辑
  • 【数据分享】土地利用矢量shp数据分享-福建
  • 从关键词到语义理解:小陌引擎如何重构AI搜索优化逻辑?
  • Android 12 在 Rockchip 平台上的分区表parametet.txt 自动生成机制解析
  • 【单片机day03】
  • vue3存储/获取本地或会话存储,封装存储工具,结合pina使用存储
  • 电子病历空缺句的语言学特征描述与自动分类探析(以GPT-5为例)(下)
  • LLM重排器落地难题:如何破解速度与精度的工程困局?
  • Claude Code Router实现默认回复中文回复
  • 轻量级的磁盘碎片整理程序-开箱急用快速清理磁盘垃圾和碎片-供大家学习研究参考
  • Redis 客户端与服务器:银行的 “客户服务系统” 全流程
  • LeetCode 面试经典 150_矩阵_螺旋矩阵(35_54_C++_中等)(按层模拟)