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

参考:https://leetcode.com/problems/binary-tree-inorder-traversal/solution/

二叉树的遍历一般有两种办法:递归、通过栈进行迭代。此外,还有通过模拟线索二叉树进行遍历的方式。

递归的代码十分简单,这里就不再赘述。

中序遍历迭代遍历算法:

  • 遇到一个节点,就把它圧栈,并去遍历它的左子树
  • 当左子树遍历结束后,从栈顶弹出这个节点并访问它
  • 然后再去中序遍历它的右子树
/*** 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> ans;stack<TreeNode*> temp;while( root || !temp.empty()){while(root){temp.push(root);root = root->left;}if(!temp.empty()){root = temp.top();temp.pop();ans.push_back(root->val);root = root->right;}}return ans;}
};

“线索”二叉树:

在这里我们不必为节点添加额外的指针域来表示节点的某种遍历顺序的前后位置分别是什么节点,

而是通过以线索二叉树的思想遍历二叉树,把树直接改造成可直接向下遍历的结构。

具体可见:https://leetcode.com/problems/binary-tree-inorder-traversal/solution/

/*** 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> ans;TreeNode* temp = new TreeNode(0);// 因为我们不断让root=root->right,所以判断条件为root != NULLwhile(root != NULL){// root有左子树,就把root修改为左子树的最右节点的右节点if(root->left){// 得到root左子树的最右节点temp = root->left;while(temp->right != NULL){temp = temp->right;}// 把root修改为左子树的最右节点的右节点temp->right = root;// 注意要把root节点的左节点置为NULL!// 在这之前先存下root的左节点,然后修改root,进行下一轮while循环temp = root->left;root->left = NULL;root = temp;}else{// root没有左子树,说明当前节点是当前树中的最左节点// 根据中序遍历的定义,把val存入ans,继续while循环ans.push_back(root->val);root = root->right;}}return ans;}
};

转载于:https://www.cnblogs.com/tornado549/p/10799742.html

94. Binary Tree Inorder Traversal二叉树的中序遍历相关推荐

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

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

  2. [LeetCode] Binary Tree Postorder Traversal 二叉树的后序遍历

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

  3. 145. Binary Tree Postorder Traversal 二叉树的后序遍历

    给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1\2/3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? DFS 今天这道题比较简单,直 ...

  4. 【二叉树迭代版中序遍历】LeetCode 94. Binary Tree Inorder Traversal

    LeetCode 94. Binary Tree Inorder Traversal Solution1:递归版 二叉树的中序遍历递归版是很简单的,中序遍历的迭代版需要特殊记一下! 迭代版链接:htt ...

  5. LeetCode 94. Binary Tree Inorder Traversal

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

  6. 94. Binary Tree Inorder Traversal

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

  7. 94 Binary Tree Inorder Traversal

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

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

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

  9. leetcode[94]Binary Tree Inorder Traversal

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

最新文章

  1. [ZT]如何取得客户端的Windows登录用户名?
  2. 做 AI 大咖在顶级单位之间随兴漂移,好开心!
  3. 1920+1080+android三星手机,三星Galaxy Note3能拍摄1080p视频吗?支持1080p播放吗?
  4. Asp.Net函数集
  5. uiautomator日志文件转换为xml格式文件
  6. 如何创建MFC模式对话框与非模式对话框
  7. python中main的含义及用法_python中main函数的用法
  8. Eclipse中移除native层编译支持
  9. 高并发实战之幂等处理
  10. 转:Confusion Matrix(混淆矩阵) 解释最全的一个
  11. 基于springboot的在线考试系统
  12. What are FeliCa and PaSoRi?
  13. 计算机网络投标书质量保证措施,计算机网络标书模板.doc
  14. HTML+JS+websocket 实现联机“游戏王”对战(一)
  15. win10系统steam连接不上服务器,win10系统steam无法连接到更新服务器的解决方法
  16. 互联网公司的监控运维
  17. PC微信本地图片格式转化
  18. 牛客网数字化招聘解决方案,支持10万人同时在线笔试
  19. 今天,就让坏得很的糟老头子来告诉你顺序表的基操,零基础也可get!
  20. C# 保存窗口为图片(保存纵断面图)

热门文章

  1. Canvas的save和restore方法
  2. restorecon
  3. 获取init程序的调试信息和uevent的调试信息需要打开的两个宏
  4. org.hibernate.hql.ast.QuerySyntaxException: ? is not mapped
  5. Aix netstat命令解析
  6. 剑指offer 算法 (知识迁移能力2)
  7. 基于免费人脸识别的闸机开发及源码分享
  8. JS ajax 返回的json对象 新增属性值(干货)
  9. CVE-2017-5521: Bypassing Authentication on NETGEAR Routers(Netgear认证绕过漏洞)
  10. 系统要关闭,可我程序还有事要处理?