/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
方法一:用非递归。
class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
       vector<int>res;
       if(root==NULL)
       {
        return res;
       }
    stack<TreeNode*>s;
    s.push(root);
    while(!s.empty())
    {
        TreeNode*node=s.top();
        s.pop();
        res.push_back(node->val);
     
         if(node->right)
         {
            s.push(node->right);
         }
         if(node->left)
         {
            s.push(node->left);
         }
    }
    return res;
    }
};
方法二:用递归法:
class Solution {
public:
     void process(vector<int>&res,TreeNode* root)
     {
        if(root==NULL)
        {
            return ;
        }
        res.push_back(root->val);
        process(res,root->left);
        process(res,root->right);
     }
    vector<int> preorderTraversal(TreeNode* root) {
       vector<int>res;//建立一个不需要知道元素个数的容器,也就是数组形式
       process(res,root);
       return res;
    }
};