Given a binary tree, return the preorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3 return [1,2,3].
http://oj.leetcode.com/problems/binary-tree-preorder-traversal/
Solution:
Recursive way is simple, just a small modification based on the inorder traversal. You can find it here http://blog.youkuaiyun.com/starcroce/article/details/18243793.
We are talking about iterative way. We need to use stack to store these nodes.
First push the root, then pop and print it. Then push right, then push left. Then pop and print left. Then pop and print right. So we get the preorder traversal.
https://github.com/starcroce/leetcode/blob/master/binary_tree_preorder_traversal.cpp
// 52 ms for 67 test cases
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode *root) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
vector<int> ans;
if(root == NULL){
return ans;
}
stack<TreeNode *> tmp;
tmp.push(root);
while(!tmp.empty()) {
TreeNode *top = tmp.top();
ans.push_back(top->val);
tmp.pop();
// because preorder is root-left-right, so we push right child first
if(top->right != NULL) {
tmp.push(top->right);
}
if(top->left != NULL) {
tmp.push(top->left);
}
}
return ans;
}
};
本文介绍了如何使用递归和迭代两种方法实现二叉树的前序遍历,并通过实例代码演示了具体实现过程。
1137

被折叠的 条评论
为什么被折叠?



