二分木の前、中、後の順序

二分木のプレオーダートラバーサル

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関数には記述しないでください
。後で、再帰関数の操作を変更してください。

おすすめ

転載: blog.csdn.net/qq_44808694/article/details/111415722