leetcode-94-Binary Tree Inorder Traversal
来源:互联网 发布:三级域名申请 编辑:程序博客网 时间:2024/06/05 09:49
#include <iostream>#include <vector>#include <stack>using namespace std;//Definition for a binary tree node.struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};/* 在144先序的基础上用栈和morris实现 */class Solution {public: vector<int> preorderTraversal(TreeNode* root) { stack<TreeNode *> mystack; vector<int> myvec; if (root == NULL) { return myvec; } TreeNode *cur = root; while (!mystack.empty() || cur) { //所有节点都有可能成为根, if (cur) { mystack.push(cur); cur = cur->left; } else { //当左子树是空的就看右子树,同时访问根节点 cur = mystack.top(); mystack.pop(); myvec.push_back(cur->val); cur = cur->right; } } return myvec; }};/* morris遍历,只用一个指针遍历即可不用栈,空间为O(1),时间为O(N), 将一颗左子树的最右的节点,指向它的根。在遍历右子树。如果没有左子树 就直接遍历cur,然后访问它的右子树;如果有左子树,就遍历这个节点,然后 访问左子树,并在左子树中寻找以这个节点为根的最后一个叶子节点,并将利用 第一种情况的特点将叶子节点的右儿子连着根,当访问完最后一个节点再访问根 的右子树。重要的是找跟的过程,前序和中序的区别就是前序一找到跟就push进去, 中序要便利完跟的左子树才能将根push。 *///class Solution {//public:// vector<int> preorderTraversal(TreeNode* root) {// vector<int> myvec;// TreeNode *cur = root;// while (cur) {// if (cur->left == NULL) {// myvec.push_back(cur->val);// cur = cur->right;// } else {// //寻找根的过程// TreeNode *prev = cur->left;// while (prev->right && prev->right != cur) {// prev = prev->right;// }// if (prev->right == NULL) {// //寻找到根的位置// //myvec.push_back(cur->val);// //建立线索后,遍历左子树// prev->right = cur;// cur = cur->left;// } else {// /*去掉线索,恢复树的结构,// cur的左子树已全部遍历过了,// 遍历右子树// */// //左子树之后是根// myvec.push_back(cur->val);// prev->right = NULL;// cur = cur->right;// }// }// }// return myvec;// }//};int main(int argc, const char * argv[]) { TreeNode one = TreeNode(1); TreeNode two = TreeNode(2); TreeNode three = TreeNode(3); one.right = &two; two.left = &three; Solution s; vector<int> result = s.preorderTraversal(&one); for (int i = 0; i < result.size(); i++) { cout << result[i] << " "; } cout << endl; return 0;}
0 0
- [leetcode 94] Binary Tree Inorder Traversal
- Leetcode NO.94 Binary Tree Inorder Traversal
- leetcode-94 Binary Tree Inorder Traversal
- leetcode || 94、Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal - LeetCode 94
- Leetcode[94]-Binary Tree Inorder Traversal
- leetcode(94):Binary Tree Inorder Traversal
- leetcode-94-Binary Tree Inorder Traversal
- Leetcode 94 Binary Tree Inorder Traversal
- leetcode[94]:Binary Tree Inorder Traversal
- LeetCode(94) Binary Tree Inorder Traversal
- Leetcode # 94 Binary Tree Inorder Traversal
- leetcode 94: Binary Tree Inorder Traversal
- [leetcode-94]Binary Tree Inorder Traversal(c++)
- leetcode-94:Binary Tree Inorder Traversal (Java)
- 【LeetCode】(94)Binary Tree Inorder Traversal(Easy)
- leetcode: (94) Binary Tree Inorder Traversal
- leetCode #94 Binary Tree Inorder Traversal
- linux(ubuntu) 创建一个名为hadoop的用户和用户组
- python for循环语句怎么写
- 关于前端程序员写前端用什么框架更好?
- VLC Android播放器介绍
- Android-Adapter实现方法(ArrayAdapter,SimpleAdapter,SimpleCursorAdapter)
- leetcode-94-Binary Tree Inorder Traversal
- lintcode:Remove Node in Binary Search Tree
- 利用php的explode函数将字符串按分隔符(比如空格)分拆并组装在数组中-----要考虑连续空格问题
- UVA 442(p141)----Matrix Chain Multiplication
- HDU 2222 Keyword Search(AC自动机)
- Cpp_类型转换
- HDMI和SDI的简介
- codeforces 589H DFS
- android 自定义TopBar的使用