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

【题解】二叉树的前中后遍历

文章目录

  • 二叉树的前序遍历
  • 二叉树的中序遍历
  • 二叉树的后序遍历

二叉树的前序遍历

题目链接:二叉树的前序遍历

解题思路1:递归

代码如下:

    void preorder(vector<int>& res, TreeNode* root){if(root == nullptr) return;//遇到空节点就返回res.push_back(root->val);//先遍历根节点preorder(res, root->left);//再遍历左子树preorder(res, root->right);//最后遍历右子树}vector<int> preorderTraversal(TreeNode* root) {vector<int> res;preorder(res, root);return res;}

解题思路2:辅助栈

代码如下:

    vector<int> preorderTraversal(TreeNode* root) {vector<int> res;if(root == nullptr) return res;stack<TreeNode*> s;s.push(root);while(!s.empty()){TreeNode* cur = s.top();res.push_back(cur->val);s.pop();if(cur->right) s.push(cur->right);if(cur->left) s.push(cur->left);}return res;}

二叉树的中序遍历

题目链接:二叉树的中序遍历

解题思路1:递归

代码如下:

    void inorder(vector<int>& res, TreeNode* root){if(root == nullptr) return;inorder(res, root->left);res.push_back(root->val);inorder(res, root->right);}vector<int> inorderTraversal(TreeNode* root) {vector<int> res;inorder(res, root);return res;}

解题思路2:辅助栈

代码如下:

    vector<int> inorderTraversal(TreeNode* root) {vector<int> res;stack<TreeNode*> s;while(root!=nullptr || !s.empty()){//每次找到最左节点while(root != nullptr){s.push(root);root = root->left;}//访问该节点TreeNode* cur = s.top();res.push_back(cur->val);s.pop();//进入右节点root = cur->right;}return res;}

二叉树的后序遍历

题目链接:二叉树的后序遍历

解题思路1:递归

代码如下:

    void postorder(vector<int>& res, TreeNode* root) {if (root == nullptr) return;postorder(res, root->left);postorder(res, root->right);res.push_back(root->val);}vector<int> postorderTraversal(TreeNode* root) {vector<int> res;postorder(res, root);return res;}

解题思路2:辅助栈

代码如下:

    vector<int> postorderTraversal(TreeNode* root) {vector<int> res;stack<TreeNode*> s;TreeNode* pre = nullptr;while(root!=nullptr || !s.empty()){//找到最左边的节点while(root != nullptr){s.push(root);root = root->left;}TreeNode* cur = s.top();s.pop();if(cur->right==nullptr || cur->right == pre){res.push_back(cur->val);pre = cur;}else{s.push(cur);root = cur->right;}}return res;}
http://www.lryc.cn/news/124659.html

相关文章:

  • 文件操作/IO
  • 基于Java+SpringBoot+vue前后端分离共享汽车管理系统设计实现
  • Mac RN环境搭建
  • log4j教程_编程入门自学教程_菜鸟教程-免费教程分享
  • DP——背包问题
  • 【从零学习python 】29. 「函数参数详解」——了解Python函数参数的不同用法
  • 10个经典战略分析模型,助力洞察市场明确优势
  • C++(Qt)软件调试---将调试工具安装到AeDebug(11)
  • 浅谈限流式保护器在住宅电气防火的应用
  • ChatGPT助力ModStartBlog,博客写作更智能
  • Jpa与Druid线程池及Spring Boot整合(二): spring-boot-starter-data-jpa 踏坑异常处理方案
  • Vue3组件库
  • AUTOSAR从入门到精通-【应用篇】基于 CAN/LIN 总线的智能配电监控系统的研究设计
  • 数据安全服务能力评定资格证书-申请流程
  • 用js快速生成一个简单的css原子库 例如: .mr-18 .pl-18
  • Java鹰眼轨迹服务 轻骑小程序 运动健康与社交案例
  • 【产品经理】微信小程序隐私保护指引
  • springboot创建websocket服务端
  • 网络安全攻防实战:探索互联网发展史
  • pwm接喇叭搞整点报时[keyestudio的8002模块]
  • 配置listener tcps加密 enable SSL encryption for Oracle SQL*Net
  • 【Sklearn】基于逻辑回归算法的数据分类预测(Excel可直接替换数据)
  • 自然数的拆分问题
  • du -mh命令
  • MySQL 8 group by 报错 this is incompatible with sql_mode=only_full_group_by
  • Mongodb (四十一)
  • 16 dlsys GAN
  • css3-flex布局:基础使用 / Flexbox布局
  • MYSQL-习题掌握
  • Python-迭代