class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int>res;
Traversal(root,res);
return res;
}
void Traversal(TreeNode*root,vector<int>&res)
{
if(!root) return ;
res.push_back(root->val);
Traversal(root->left,res);
Traversal(root->right,res);
}
};
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int>res;
Traversal(root,res);
return res;
}
void Traversal(TreeNode*root,vector<int>&res)
{
if(!root) return ;
Traversal(root->left,res);
Traversal(root->right,res);
res.push_back(root->val);
}
};
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int>res;
Traversal(root,res);
return res;
}
void Traversal(TreeNode*root,vector<int>&res)
{
if(!root) return ;
Traversal(root->left,res);
res.push_back(root->val);
Traversal(root->right,res);
}
};
次に要約:
1。再帰関数のパラメーターと戻り値を決定する
2.再帰条件から抜け出す
3.操作を実行するための再帰
上記のプレオーダートラバーサルを例として取り上げます
1。
void traversal(TreeNode* cur, vector<int>& vec)
if(!root) return ;
res.push_back(root->val);//中
Traversal(root->left,res);//左
Traversal(root->right,res);//右
これは再帰関数で準備されるコンテンツであることに注意してください!!!main関数には記述しないでください
。後で、再帰関数の操作を変更してください。