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?
//递归方法:利用一个中间函数,将res作为输入参数
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
return tmpFunction(root, res);
}
vector<int> tmpFunction(TreeNode* root, vector<int> &res){
if (root == NULL) return res;
res.push_back(root->val);
tmpFunction(root->left, res);
tmpFunction(root->right, res);
return res;
}
};
//非递归方法:
//利用一个栈结构,现将头结点root压入栈中,然后从stack中弹出栈顶节点,记为tmp,然后将tmp的值压入vector<int> res中,
//再将节点tmp的右孩子(不为空的话)先压入stack中,最后将tmp的左孩子(不为空的话)压入stack中,
//不断重复以上操作,直到stack为空
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> s;
TreeNode* tmp;
if (root == NULL) return res;
else
{
s.push(root);
while (!s.empty())
{
tmp = s.top();
s.pop();
res.push_back(tmp->val);
if (tmp->right != NULL) s.push(tmp->right);
if (tmp->left != NULL) s.push(tmp->left);
}
}
return res;
}
};