1.递归方法
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
preorder(root,result);
return result;
}
void preorder(TreeNode* root,vector<int> &result){
if(!root)return;
result.push_back(root->val);
if(root->left) preorder(root->left,result);
if(root->right) preorder(root->right,result);
}
2.非递归方法(栈)
将根节点压入栈,访问栈顶元素,如果栈不为空就将值push到数组中。接着访问栈顶元素的右子节点,放入栈;访问左子节点,放入栈
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
if(!root) return result;
stack<TreeNode*> temp{{root}};
TreeNode* p;
while(!temp.empty()){
p=temp.top();temp.pop();
result.push_back(p->val);
if(p->right) temp.push(p->right);
if(p->left) temp.push(p->left);
}
return result;
}