给定一个二叉树,返回它的 前序 遍历。
下面我将给出两种写法,一种是递归,一种是迭代
//递归方法实现
//递归实现所有的树基本都是三行
//但要注意的是,我们要把递归实现的部分尽可能变少,否则会造成栈溢出
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
if(root)
{
PreTree(root,result);
}
return result;
}
private:
void PreTree(TreeNode* root, vector<int>& v)
{
if(root)
{
v.push_back(root->val);
PreTree(root->left,v);
PreTree(root->right,v);
}
}
};
非递归方法实现
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
if(root == nullptr)
{
return result;
}
stack<TreeNode*> TreeStack;
TreeNode* tmp;
TreeStack.push(root);
while(!TreeStack.empty())
{
tmp = TreeStack.top();
result.push_back(tmp->val);
TreeStack.pop();
if(nullptr != tmp->right)
{
TreeStack.push(tmp->right);
}
if(nullptr != tmp->left)
{
TreeStack.push(tmp->left);
}
}
return result;
}
};