【二叉树迭代版中序遍历】LeetCode 94. Binary Tree Inorder Traversal
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相关推荐
- LeetCode 94. Binary Tree Inorder Traversal
94. Binary Tree Inorder Traversal Given a binary tree, return the inorder traversal of its nodes' va ...
- [LeetCode]:94:Binary Tree Inorder Traversal
题目: Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binar ...
- leetcode[94]Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tr ...
- [swift] LeetCode 94. Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tr ...
- LeetCode 94. Binary Tree Inorder Traversal--二叉树中序遍历--递归,迭代--C++,Python解法
题目地址:Binary Tree Inorder Traversal - LeetCode Given a binary tree, return the inorder traversal of i ...
- 94. Binary Tree Inorder Traversal二叉树的中序遍历
网址:https://leetcode.com/problems/binary-tree-inorder-traversal/ 参考:https://leetcode.com/problems/bin ...
- 94. Binary Tree Inorder Traversal 二叉树的中序遍历
给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3]1\2/3输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 二叉树遍历 不太想用递归,试试循环吧 ...
- 94. Binary Tree Inorder Traversal
题目: Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binar ...
- 94 Binary Tree Inorder Traversal
递归的代码是以前数据结构书上常见的: public ArrayList<Integer> inorderTraversal(ConstructBinaryTreefromPostorder ...
最新文章
- intent传递有没有大小限制,是多少?
- scrapy配置文件操作核心API解读
- Linux关于终端的基本概念汇总(tty/pty)(转)
- 【原创翻译】如何命名变量
- 子网规划与组网实验_【干货】从0到1,“大型WLAN组网”基础知识分享~
- 无线时代来临,谁来管理我的无线AP?
- C++之boost库报错:note: in expansion of macro BOOST_MPL_ASSERT_NOT
- 装双系统?不需要!教你在iMac上流畅使用Windows!
- 开源三维地球Cesium中如何离线加载卫星影像和高程DEM数据
- 联想开机壁纸存放位置
- Javascript对象基础讲解
- 机器学习sklearn 计算recall , precison , F1
- HashMap和TreeMap
- java poi excel导出2003版改成2007版本的时候报错
- 带有serpstack的实时Google搜索结果API
- 字符串(varchar)和二进制(varbinary)互转
- 「聚变」前端 客户端 | 第十七届 D2 终端技术大会,开放报名!
- 笔记:springboot-admin 整合spring security应用注册失败问题
- 【android 9.0 系统】FOTA升级之后,设置出现乱码
- php取am+pm时间格式,php – 如何将带有日期和时间AM / PM的字符串转换为24小时的mysql时间戳格式...
热门文章
- Java中对象的串行化(Serialization)和transient关键字
- C++如何防止头文件被二次编译
- 树莓派4B安装Ubuntu20.04
- 数据结构笔记(一)-- 概念
- flink读取不到文件_Flink流处理API——Source
- python驱动级模拟按键大师_AB叔_C#驱动级模拟按键操作
- oracle外部表迁移,海量数据迁移之外部表并行抽取
- python中while的特点_Python【2】:初入python 用户输入,if,(while 循环)
- 求向量的垂线_高考数学填空题如何快速求直线关于直线对称的直线方程
- vc+ mfc 方法怎么被调用_Spring源码阅读(二)我的方法是怎么被自动调用的