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

二叉树的统一迭代法

目录

一:中序遍历:

二:前序遍历:

三:后序遍历


记忆法:跟序列的遍历相反:

比如中序是中左右结点遍历输出的,那压入栈的顺序就是右左中

st.push(node);                          // 中st.push(NULL);if (node->right) st.push(node->right);  // 右if (node->left) st.push(node->left);    // 左

一:中序遍历:

class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {vector<int> result;stack<TreeNode*> st;if (root != NULL) st.push(root);while (!st.empty()) {TreeNode* node = st.top();if (node != NULL) {st.pop(); // 将该节点弹出,避免重复操作,下面再将右中左节点添加到栈中if (node->right) st.push(node->right);  // 添加右节点(空节点不入栈)st.push(node);                          // 添加中节点st.push(NULL); // 中节点访问过,但是还没有处理,加入空节点做为标记。if (node->left) st.push(node->left);    // 添加左节点(空节点不入栈)} else { // 只有遇到空节点的时候,才将下一个节点放进结果集st.pop();           // 将空节点弹出node = st.top();    // 重新取出栈中元素st.pop();result.push_back(node->val); // 加入到结果集}}return result;}
};

二:前序遍历:

class Solution {
public:vector<int> preorderTraversal(TreeNode* root) {vector<int> result;stack<TreeNode*> st;if (root != NULL) st.push(root);while (!st.empty()) {TreeNode* node = st.top();if (node != NULL) {st.pop();if (node->right) st.push(node->right);  // 右if (node->left) st.push(node->left);    // 左st.push(node);                          // 中st.push(NULL);} else {st.pop();node = st.top();st.pop();result.push_back(node->val);}}return result;}
};

三:后序遍历

class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {vector<int> result;stack<TreeNode*> st;if (root != NULL) st.push(root);while (!st.empty()) {TreeNode* node = st.top();if (node != NULL) {st.pop();st.push(node);                          // 中st.push(NULL);if (node->right) st.push(node->right);  // 右if (node->left) st.push(node->left);    // 左} else {st.pop();node = st.top();st.pop();result.push_back(node->val);}}return result;}
};

http://www.mrgr.cn/news/6001.html

相关文章:

  • Docker续1:
  • 正交试验法(或PICT)来设计测试用例
  • 点餐系统实战开发教程01需求分析
  • 【IEEE出版 | 往届会后三个月检索】第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024)
  • CSS 对齐
  • 数据库系统之数据库设计
  • [Qt][QSS][上]详细讲解
  • python-货物种类(赛氪OJ)
  • 网络安全 day1 --- IIS服务器搭建、常规web搭建、zblog文件夹权限、站库分离
  • 软件工程概述(上)
  • 软件测试 缺陷报告处理流程
  • 华为数通路由交换HCIP/HCNP
  • 只出现一次的数字2
  • k8s学习(三十八) 使用OpenTelemetry+jaeger实现链路追踪
  • 【git】 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
  • HarmonyOS开发实战:应用权限/通知设置跳转方案
  • Jira使用指南(高级搜索JQL/统计/面板设计)
  • nodejs安装
  • 探索数据结构:图(二)之图的遍历,Kruskal与Prim算法
  • PHP开发过程中常见问题快速解决