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]
.
Note: Recursive solution is trivial, could you do it iteratively?
这道题是前序遍历二叉树,题目难度为Medium。大家可以顺带看下第94题(传送门)中序遍历二叉树和第145题(传送门)后续遍历二叉树。觉得这道题太low的同学可以跳过。
递归版本代码:
class Solution {
void getPreData(TreeNode* n, vector<int>& ret) {
if(!n) return;
ret.push_back(n->val);
getPreData(n->left, ret);
getPreData(n->right, ret);
}
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ret;
getPreData(root, ret);
return ret;
}
};
非递归版本代码:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ret;
stack<TreeNode*> stk;
TreeNode* p = root;
while(p || !stk.empty()) {
while(p) {
ret.push_back(p->val);
stk.push(p);
p = p->left;
}
p = stk.top()->right;
stk.pop();
}
return ret;
}
};