[LintCode] 二叉树的前序遍历
2015-06-29 15:38
267 查看
The recursive solution is trivial and I omit it here.
Iterative Solution using Stack (O(n) time and O(n) space):
Another more sophisticated solution using Morris Traversal (O(n) time and O(1) space):
Iterative Solution using Stack (O(n) time and O(n) space):
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { public: /** * @param root: The root of binary tree. * @return: Preorder in vector which contains node values. */ vector<int> preorderTraversal(TreeNode *root) { // write your code here vector<int> nodes; TreeNode* node = root; stack<TreeNode*> right; while (node || !right.empty()) { if (node) { nodes.push_back(node -> val); if (node -> right) right.push(node -> right); node = node -> left; } else { node = right.top(); right.pop(); } } return nodes; } };
Another more sophisticated solution using Morris Traversal (O(n) time and O(1) space):
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { public: /** * @param root: The root of binary tree. * @return: Preorder in vector which contains node values. */ vector<int> preorderTraversal(TreeNode *root) { // write your code here vector<int> nodes; TreeNode* node = root; while (node) { if (node -> left) { TreeNode* predecessor = node -> left; while (predecessor -> right && predecessor -> right != node) predecessor = predecessor -> right; if (!(predecessor -> right)) { nodes.push_back(node -> val); predecessor -> right = node; node = node -> left; } else { predecessor -> right = NULL; node = node -> right; } } else { nodes.push_back(node -> val); node = node -> right; } } return nodes; } };
相关文章推荐
- 调整oracle mysql字体
- AngularJs 在控制器中过滤
- 80.Remove Duplicates from Sorted Array II
- 走进DOM:HTML DOM
- Linux 上网络监控工具 ntopng 的安装
- java中 Map与实体类javaBean直接的互相转换
- 涨停板联盟6月30日分享。
- ssh之<context:component-scan base-package="com.xx" />
- JAVA之JDBC入门
- oracle排序操作
- 黑马程序员——C语言之函数与手动编译执行C程序
- C#中Base64之编码,解码方法
- Articulate Studio课间制作工具
- C#执行外部命令的方法
- 把android 中图片局部区域改为透明
- 动态规划:矩阵连乘问题
- java链接jdbc
- 116.排列学生结构体数据
- 虚函数表解析
- 【Energy Big Data】能源互联网和电力大数据