Binary Tree Inorder Traversal [leetcode] 非递归的三种解法
来源:互联网 发布:开个网络棋牌多少钱 编辑:程序博客网 时间:2024/03/29 10:11
第一种方法是Morris Traversal
是O(n)时间复杂度,且不需要额外空间的方法。缺点是需要修改树。
通过将叶子节点的right指向其中序后继。
代码如下
vector<int> inorderTraversal(TreeNode *root) { vector<int> res; TreeNode * cur = root; TreeNode * pre = NULL; while (cur) { if (cur->left == NULL) { res.push_back(cur->val); cur = cur->right; } else { pre = cur->left; while (pre->right && pre->right != cur) pre = pre->right; if (pre->right == NULL) { pre->right = cur; cur = cur->left; } if (pre->right == cur) { pre->right = NULL; res.push_back(cur->val); cur = cur->right; } } } return res; }
第二种方法利用栈,模拟递归过程
vector<int> inorderTraversal(TreeNode *root) { vector<int> res; vector<TreeNode*> stack; stack.push_back(root); set<TreeNode*> visited; while (stack.size()) { TreeNode * cur = stack.back(); stack.pop_back(); if (!cur) continue; if (visited.find(cur) == visited.end())//visited for the first time { stack.push_back(cur->right); stack.push_back(cur); stack.push_back(cur->left); visited.insert(cur); } else//visited for the second time res.push_back(cur->val); } return res; }
第三种方法来自《数据结构》
将所有左子节点入栈,当没有左子结点时取栈顶元素打印并转移到右子节点
vector<int> inorderTraversal(TreeNode *root) { vector<int> res; vector<TreeNode*> stack; TreeNode* cur = root; while (stack.size() || cur) { if (cur) { stack.push_back(cur); cur = cur->left; } else { cur = stack.back(); stack.pop_back(); res.push_back(cur->val); cur = cur->right; } } return res; }
0 0
- Binary Tree Inorder Traversal [leetcode] 非递归的三种解法
- [LeetCode] Binary Tree Inorder Traversal [递归版]
- 【LeetCode】Binary Tree Inorder Traversal 二叉树中序遍历递归以及非递归算法
- leetcode 94. Binary Tree Inorder Traversal-中序遍历|递归|非递归
- sicily inorder traversal for Binary Tree[递归和非递归]
- 【LeetCode】94. Binary Tree Inorder Traversal 解法及注释
- LeetCode 94. Binary Tree Inorder Traversal 树的前序、中序,后序遍历的非递归实现
- LeetCode Binary Tree Preorder Traversal 前序遍历二叉树 递归和非递归解法
- LeetCode Binary Tree Postorder Traversal 二叉树后序遍历 递归和非递归解法
- Leetcode 94:Binary Tree Inorder Traversal (二叉树中序遍历,非递归)
- 【leetcode】94Binary Tree Inorder Traversal(非递归中序遍历二叉树)
- 【启发】94. Binary Tree Inorder Traversal(树的非递归遍历 + 栈模拟递归)
- LeetCode: Binary Tree Inorder Traversal
- [LeetCode]Binary Tree Inorder Traversal
- LeetCode Binary Tree Inorder Traversal
- [Leetcode] Binary Tree Inorder Traversal
- Leetcode: Binary Tree Inorder Traversal
- LeetCode Binary Tree Inorder Traversal
- 梁衅衅兔约帕屡商览鞍浇烫排刎荚
- HDU 5044 Tree(LCA ,2014上海网络赛1003)
- Configure .htaccess
- c/c++函数调用的栈的问题
- HackerRank - Stock Maximize
- Binary Tree Inorder Traversal [leetcode] 非递归的三种解法
- WinForm下编写分页控件,实现DataGridView的分页效果
- SQL语句执行顺序
- zoj 2750 Idiomatic Phrases Game(最短路径)
- 【Java】StringTokenizer简单使用
- Git教程
- 《Hadoop基础教程》读后感
- 一切成功源于积累——20140927 认识货币——日元
- 鸥幽孕纤煞程菜滴蛔颂肿釉棕踩纱