LeetCode 94. Binary Tree Inorder Traversal

Solution1:递归版
二叉树的中序遍历递归版是很简单的,中序遍历的迭代版需要特殊记一下!
迭代版链接:https://blog.csdn.net/allenlzcoder/article/details/79837841

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {vector<int> res;my_Inordertraversal(root, res);return res;}void my_Inordertraversal(TreeNode* root, vector<int>& res) {if (!root) return;my_Inordertraversal(root->left, res);res.push_back(root->val);my_Inordertraversal(root->right, res);}
};

Solution2:迭代版
对于任一当前结点P:
1)若P的左孩子不为空,则将P入栈并将P的左孩子置为当前节点,然后对当前结点再进行重复处理1);
2)若P的左孩子为空,则取栈顶元素s.top()并进行出栈操作,访问s.top()->val,然后将当前结点置为的s.top()的右孩子;若s.top()->right == NULL 即当前结点为NULL,重复处理2);
3)直到P为NULL并且栈为空则遍历结束。
【关键】:若当前结点为空,则进行取栈顶元素操作(访问结点元素)并把当前结点设置为栈顶结点的右孩子。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {vector<int> res;if (!root) return res;TreeNode* cur = root;stack<TreeNode*> my_stack;while(!my_stack.empty() || cur != NULL) {if(cur == NULL) {TreeNode* temp = my_stack.top();my_stack.pop();res.push_back(temp->val);cur = temp->right;} else {my_stack.push(cur);cur = cur->left;}}return res;}
};

稍微修改后的迭代版

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {if (!root) return {};vector<int> res;stack<TreeNode* > s_tree;s_tree.push(root);TreeNode *cur = root->left;while (!s_tree.empty()) {while (cur) { //把最左边的结点压入栈中s_tree.push(cur);cur = cur->left;}//访问当前结点的值TreeNode *temp = s_tree.top(); res.push_back(temp->val);    s_tree.pop();    cur = temp->right; if (cur) {s_tree.push(cur);cur = cur->left;}}return res;}
};

【二叉树迭代版中序遍历】LeetCode 94. Binary Tree Inorder Traversal相关推荐

  1. LeetCode 94. Binary Tree Inorder Traversal

    94. Binary Tree Inorder Traversal Given a binary tree, return the inorder traversal of its nodes' va ...

  2. [LeetCode]:94:Binary Tree Inorder Traversal

    题目: Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binar ...

  3. leetcode[94]Binary Tree Inorder Traversal

    Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tr ...

  4. [swift] LeetCode 94. Binary Tree Inorder Traversal

    Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tr ...

  5. LeetCode 94. Binary Tree Inorder Traversal--二叉树中序遍历--递归,迭代--C++,Python解法

    题目地址:Binary Tree Inorder Traversal - LeetCode Given a binary tree, return the inorder traversal of i ...

  6. 94. Binary Tree Inorder Traversal二叉树的中序遍历

    网址:https://leetcode.com/problems/binary-tree-inorder-traversal/ 参考:https://leetcode.com/problems/bin ...

  7. 94. Binary Tree Inorder Traversal 二叉树的中序遍历

    给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3]1\2/3输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 二叉树遍历 不太想用递归,试试循环吧 ...

  8. 94. Binary Tree Inorder Traversal

    题目: Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binar ...

  9. 94 Binary Tree Inorder Traversal

    递归的代码是以前数据结构书上常见的: public ArrayList<Integer> inorderTraversal(ConstructBinaryTreefromPostorder ...

最新文章

  1. intent传递有没有大小限制,是多少?
  2. scrapy配置文件操作核心API解读
  3. Linux关于终端的基本概念汇总(tty/pty)(转)
  4. 【原创翻译】如何命名变量
  5. 子网规划与组网实验_【干货】从0到1,“大型WLAN组网”基础知识分享~
  6. 无线时代来临,谁来管理我的无线AP?
  7. C++之boost库报错:note: in expansion of macro BOOST_MPL_ASSERT_NOT
  8. 装双系统?不需要!教你在iMac上流畅使用Windows!
  9. 开源三维地球Cesium中如何离线加载卫星影像和高程DEM数据
  10. 联想开机壁纸存放位置
  11. Javascript对象基础讲解
  12. 机器学习sklearn 计算recall , precison , F1
  13. HashMap和TreeMap
  14. java poi excel导出2003版改成2007版本的时候报错
  15. 带有serpstack的实时Google搜索结果API
  16. 字符串(varchar)和二进制(varbinary)互转
  17. 「聚变」前端 客户端 | 第十七届 D2 终端技术大会,开放报名!
  18. 笔记:springboot-admin 整合spring security应用注册失败问题
  19. 【android 9.0 系统】FOTA升级之后,设置出现乱码
  20. php取am+pm时间格式,php – 如何将带有日期和时间AM / PM的字符串转换为24小时的mysql时间戳格式...

热门文章

  1. Java中对象的串行化(Serialization)和transient关键字
  2. C++如何防止头文件被二次编译
  3. 树莓派4B安装Ubuntu20.04
  4. 数据结构笔记(一)-- 概念
  5. flink读取不到文件_Flink流处理API——Source
  6. python驱动级模拟按键大师_AB叔_C#驱动级模拟按键操作
  7. oracle外部表迁移,海量数据迁移之外部表并行抽取
  8. python中while的特点_Python【2】:初入python 用户输入,if,(while 循环)
  9. 求向量的垂线_高考数学填空题如何快速求直线关于直线对称的直线方程
  10. vc+ mfc 方法怎么被调用_Spring源码阅读(二)我的方法是怎么被自动调用的