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

第六章 二叉树part01

2026.02.07 第十一天

144 二叉树的前序遍历

二叉树基础

由于是前序遍历,把每一层递归需要处理的内容放在最前面即可~

class Solution {
private:void traversal(TreeNode* node, vector<int>& vec) {if(node == nullptr) {return;}vec.push_back(node->val);traversal(node->left, vec);traversal(node->right, vec);}
public:vector<int> preorderTraversal(TreeNode* root) {vector<int> result;traversal(root, result);return result;}
};

迭代法实现:

class Solution {
public:vector<int> preorderTraversal(TreeNode* root) {if(root == nullptr) {return {};}vector<int> result;stack<TreeNode*> sta;sta.push(root);while(sta.empty() != true) {TreeNode* temp = sta.top();result.push_back(temp->val);sta.pop();if(temp->right != nullptr) {sta.push(temp->right);}if(temp->left != nullptr) {sta.push(temp->left);}}return result;}
};

144 二叉树的后序遍历

由于是后序遍历,把每一层递归需要处理的内容放在最后面即可~

class Solution {
private:void traversal(TreeNode* node, vector<int>& vec) {if(node == nullptr) {return;}traversal(node->left, vec);traversal(node->right, vec);vec.push_back(node->val);}public:vector<int> postorderTraversal(TreeNode* root) {vector<int> result;traversal(root, result);return result;}
};

迭代法实现:

很巧妙的思想,将left和right的入栈顺序反转,从而将数组中元素的顺序由中左右变成中右左,最后反转整个数组,得到左右中,也就是后序遍历结果。

class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {if (root == nullptr) {return {};}vector<int> result;stack<TreeNode*> sta;sta.push(root);while (sta.empty() != true) {TreeNode* temp = sta.top();result.push_back(temp->val);sta.pop();if (temp->left != nullptr) {sta.push(temp->left);}if (temp->right != nullptr) {sta.push(temp->right);}}reverse(result.begin(), result.end());return result;}
};

144 二叉树的中序遍历

由于是中序遍历,把每一层递归需要处理的内容放在中间即可~

class Solution {
private:void traversal(TreeNode* node, vector<int>& vec) {if(node == nullptr) {return;}traversal(node->left, vec);vec.push_back(node->val);traversal(node->right, vec);}public:vector<int> inorderTraversal(TreeNode* root) {vector<int> result;traversal(root, result);return result;}
};

迭代法实现:

中序迭代相交前后稍微复杂了一些,需要专门定义一个指针来控制节点走向。

class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {vector<int> result;stack<TreeNode*> st;TreeNode* cur = root;while(cur != nullptr || !st.empty()) {if(cur != nullptr) {st.push(cur);cur = cur->left;}else {cur = st.top();st.pop();result.push_back(cur->val);cur = cur->right;}}return result;}
};

统一风格的迭代法前中后序遍历代码

两种方法,一种是空指针标记法,另一种是boolean标记法。

二叉树的层序遍历

用到队列,每遍历一层要记录入队的元素数量。

http://www.jsqmd.com/news/361920/

相关文章:

  • 实验室必备!高性价比纳米粒度仪选购推荐 - 品牌推荐大师1
  • cladue skills
  • 48 小时做完并提审:待办事项微信小程序实战(VS Code + Codex 插件)
  • 【IEEE出版 | EI检索】第三届生成式人工智能与信息安全国际学术会议(GAIIS 2026)
  • 解决Abaqus分析不收敛问题的10个实用方法
  • telock0.98b1脱壳分析
  • 完整演示 Git Flow 所有分支的创建与流转过程的 实操命令示例
  • nginx的安装一个最简单的配置(windows和Centos)
  • 内存映射的属性
  • 神马影视 8.8 版 2026 最新源码系统 技术解析
  • 拉萨样本:高原缺氧环境下的AI压力测试术
  • OCAD应用:凸轮曲线的优化设计
  • Git Flow 详解与最佳实践:打造规范高效的团队协作流程
  • 【Django毕设全套源码+文档】基于Python的旅游管理系统的设计(丰富项目+远程调试+讲解+定制)
  • 大模型落地全攻略:从技术实现到商业价值创造1
  • 【Django毕设全套源码+文档】基于Python的智慧社区管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • Spring Boot中实现多线程6种方式,提高架构性能
  • HTML 用户二次确认:提升操作安全性的关键实践
  • MES系统中的核心基础概念
  • 【Django毕设全套源码+文档】基于Django的粤系菜谱分享平台的设计与实现(丰富项目+远程调试+讲解+定制)
  • 从数据清洗到生命科学:测试员的生物学跃迁
  • python自习室座位签到预约系统nodejs vue
  • 深入理解 Vue 生命周期:created 与 mounted 的核心差异与实战指南
  • 大模型落地实战全景:从技术选型到商业价值实现
  • 天猫超市卡回收攻略 - 畅回收小程序
  • 学霸都在用!2026AI 论文生成软件榜单,科研党亲测好用
  • AI越狱攻防战:揭秘大模型安全威胁 - 指南
  • 震惊!90%太空开发者忽略的宇宙辐射防护:软件测试从业者的生存指南
  • 大模型落地全栈指南:从技术实现到商业价值
  • 照着用就行:10个降AI率工具测评,专科生必看的降AI率指南