递归方法
递归三部曲
1.确定递归函数的参数和返回值
2.确定递归终止条件
3.单层处理逻辑
void traversal(TreeNode* cur,vector<int>& ret)
{
if (cur == nullptr){ // 终止条件
return;
}
ret.push_back(cur->val); // 单层逻辑
traversal(cur->left,ret);
traversal(cur->right,ret);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ret;
traversal(root,ret);
return ret;
}
迭代方法
循环处理栈顶元素:取栈顶元素->处理->弹出->压入右孩子->压入左孩子
直到栈为空
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ret;
stack<TreeNode*> sta;
if (root != nullptr){
sta.push(root);
}
while(!sta.empty()){
TreeNode* cur = sta.top();
sta.pop();
ret.push_back(cur->val);
if (cur->right!=nullptr){
sta.push(cur->right);
}
if (cur->left !=nullptr){
sta.push(cur->left);
}
}
return ret;
}