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

栈模拟先序后序中序遍历(非递归遍历)

先序遍历:

vector<int> preorderTraversal(TreeNode* u) {stack<TreeNode*>stk;vector<int>res;if(u==nullptr) return res;while(stk.size()||u){if(u){res.push_back(u->val);//遍历当前结点stk.push(u);//记录当前递归层u=u->left;//遍历左子树}else {u=stk.top();stk.pop();//返回上一层递归层u=u->right;//遍历右子树}}return res;}

优化版:

vector<int> preorderTraversal(TreeNode* u) {stack<TreeNode*>stk;vector<int>res;if(u==nullptr) return res;stk.push(u);while(stk.size()){auto t=stk.top();stk.pop();res.push_back(t->val);if(t->right)stk.push(t->right);//后遍历的先入栈,即右子树先入栈if(t->left)stk.push(t->left);//先遍历的后入栈,即左子树后入栈}return res;}

后序遍历:

后序遍历与先序遍历有互通之处,即后序遍历的倒序为:根右左。

所以我们可以把先序遍历的左右子树的遍历顺序倒一下便变成了后序遍历的倒序。

vector<int> postorderTraversal(TreeNode* u) {stack<TreeNode*>stk;vector<int>res;if(u==nullptr) return res;while(stk.size()||u){if(u){res.push_back(u->val);//遍历当前结点stk.push(u);//记录下该层的遍历u=u->right;//先遍历右子树}else {u=stk.top();stk.pop();u=u->left;//再遍历左子树}}reverse(res.begin(),res.end());return res;}

同样有优化版:

vector<int> postorderTraversal(TreeNode* u) {stack<TreeNode*>stk;vector<int>res;if(u==nullptr) return res;stk.push(u);while(stk.size()){TreeNode* t=stk.top();stk.pop();res.push_back(t->val);if(t->left)stk.push(t->left);if(t->right)stk.push(t->right);}reverse(res.begin(),res.end());return res;}

中序遍历:

vector<int> inorderTraversal(TreeNode* root) {vector<int>res;stack<TreeNode*>stk;while(stk.size()||root){if(root){stk.push(root);//相当于记录下了当前层递归root=root->left;//先遍历左子树}else{root=stk.top();//返回上一层递归stk.pop();res.push_back(root);//遍历当前结点root=root->right;//遍历右子树}}return res;}

中序遍历没有找到优化版,, 

http://www.lryc.cn/news/249560.html

相关文章:

  • linux 内核软中断介绍
  • 软考:2024年软考高级:软件工程
  • Kubernetes(K8s)_15_CNI
  • python 生成器的作用
  • 第十五届蓝桥杯(Web 应用开发)模拟赛 2 期-大学组(详细分析解答)
  • 图解系列--HTTPS,认证
  • element plus中表格的合计属性和例子
  • 计网Lesson1笔记
  • 指针数组以及利用函数指针来实现简易计算器及typedef关键字(指针终篇)
  • josef JZ-7Y-33静态中间继电器 电压DC220V 板前接线
  • Java第二十章 ——多线程
  • 【超强笔记软件】Obsidian实现免费无限流量无套路云同步
  • 【Linux小项目】实现自己的bash
  • 客户案例:EDLP助力金融行业打造高效数据防泄露体系
  • 【JavaFX漏扫开发基础】stage窗口/模式/模态
  • MySQL进阶知识:锁
  • linux下的工具---gdb
  • ESP32-Web-Server编程-JS 基础 2
  • Java Web基础教程
  • BUUCTF john-in-the-middle 1
  • HashMap的死循环及数据覆盖问题
  • 数据库数据恢复—MongoDB数据库文件拷贝出现错误的数据恢复案例
  • 2023年11月个人工作生活总结
  • Spark-06:Spark 共享变量
  • Spring整合web环境
  • 分享从零开始学习网络设备配置--任务4.3 使用动态路由RIPng实现网络连通
  • vue2.0+elementui集成file-loader之后图标失效问题
  • C# 文件帮助类(FileHelper)
  • WordPress 外链跳转插件
  • 算法的10大排序