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

从零开始的LeetCode刷题日记:二叉树的迭代遍历

一.相关链接

题目链接:

144. 二叉树的前序遍历

145.二叉树的后序遍历

94.二叉树的中序遍历

二.心得体会

前面用简单的递归法几行实现了这些问题,有些题目可以用迭代法来实现,通常使用的辅助数据结构是栈(递归的底层逻辑就是栈)。

1.对于前序遍历来说,整体的方法比较简单,在弹出节点的时候,只需要把该节点的右节点和左节点依次弹进栈即可(因为栈是先进后出)。

2.后序遍历相对来说比较简单,目前知道前序遍历是中左右,那么我们改变左右子树的遍历顺序就成了中右左,然后整体翻转就变成了后序遍历的左右中了!

3.对于中序遍历来说,因为它的遍历顺序和访问顺序不一样,所以和前序、中序不一样。那么我们就要首先一路往最左下角找到第一个节点。一直到访问到空节点的时候,代表我们找到了最左边的节点,那么就可以开始访问这个节点,并回溯到它的父节点访问父节点,接下来就是往右子树访问了。

三.代码

1.前序遍历的迭代法实现:

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

2.后续遍历的迭代法实现:

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

3.中序遍历的迭代法实现:

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


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

相关文章:

  • 高标准农田信息化与物联网技术的融合
  • 2024年看项目管理软件与工程项目管理的奇妙融合
  • C++学习,标准库 <iterator>
  • vlan的基础知识
  • 留学生辅导 | 谈谈英国硕士论文如何进行论证
  • 利用vmware在移动硬盘安装Ubuntu2go
  • 大学新生编程学习指南:制定有效计划,开启编程之旅
  • Android14 SystemUI 启动流程(1)
  • Ubuntu里彻底卸载UHD
  • SHA256算法学习
  • MATLAB代码解析:利用DCGAN实现图像数据的生成 全网最细DCGAN设计-训练入门
  • [供应链] 让步接收
  • 安科瑞ARB5弧光保护在船舶中压配电板中的应用-安科瑞黄安南
  • Vue3创建
  • Flutter框架学习计划
  • 一份Python自动化测试学习秘籍,请查收!
  • 真空牛肉滚揉机的优点:
  • 三勾软件/ java+springboot+vue3玖玖云电商ERP多平台源码
  • 如何将AI大模型部署到本地电脑
  • Deeppaas 3.6版本发布,推动零代码开发新纪元