题目描述:二叉树的先序遍历,打印出结点值,返回一个数组
解题思路:递归实现如下:
C++版本:
class Solution {
public:
vector<int> helper(TreeNode* root, vector<int> &r)
{
if(root)
{
r.push_back(root->val);
helper(root->left, r);
helper(root->right, r);
}
return r;
}
vector<int> preorderTraversal(TreeNode* root)
{
vector<int> ret;
return helper(root, ret);
}
};
python版本:
class Solution(object):
def recursive(self, root, ret):
if root != None:
ret.append(root.val)
self.recursive(root.left, ret)
self.recursive(root.right, ret)
def preorderTraversal(self, root):
ret = []
self.recursive(root, ret)
return ret
非递归版本要借助于栈,实现如下:
C++版本:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root)
{
vector<int> ret;
stack<TreeNode*> s;
if(root)
s.push(root);
while(!s.empty())
{
TreeNode* temp = s.top();
s.pop();
ret.push_back(temp->val);
if(temp->right)
s.push(temp->right);
if(temp->left)
s.push(temp->left);
}
return ret;
}
};