LeetCode. Pre-In-Post-Order Traversal of Binary Trees

topic

144. Preorder traversal of binary tree: give you the root node of the binary tree root, return the preorder traversal of its node value

94. Inorder traversal of a binary tree: give you the root node of a binary tree rootand return an inorder traversal of its node value

145. Post-order traversal of binary tree: give you the root node of the binary tree root, return the post -order traversal of its node value

code

  1. Traverse a binary tree using recursion

Preorder, inorder, and postorder are all depth-first traversal algorithms

  • prologue
class Solution {
    
    
public:
    void Traversal(TreeNode* cur, vector<int>& vec) {
    
    
        if (cur != nullptr) {
    
    
            vec.push_back(cur->val);
            Traversal(cur->left, vec);
            Traversal(cur->right, vec);
        }
    }
    vector<int> preorderTraversal(TreeNode* root) {
    
    
        vector<int> result;
        Traversal(root, result);
        return result;
    }
};
  • Intermediate sequence
class Solution {
    
    
public:
    void Traversal(TreeNode* cur, vector<int>& vec) {
    
    
        if (cur != nullptr) {
    
    
            Traversal(cur->left, vec);
            vec.push_back(cur->val);
            Traversal(cur->right, vec);
        }
    }
    vector<int> inorderTraversal(TreeNode* root) {
    
    
        vector<int> result;
        Traversal(root, result);
        return result;
    }
};
  • post-order
class Solution {
    
    
public:
    void Traversal(TreeNode* cur, vector<int>& vec) {
    
    
        if (cur != nullptr) {
    
    
            Traversal(cur->left, vec);
            Traversal(cur->right, vec);
            vec.push_back(cur->val);
        }
    }
    vector<int> postorderTraversal(TreeNode* root) {
    
    
        vector<int> result;
        Traversal(root, result);
        return result;
    }
};
  1. Iteratively traverse a binary tree
  • prologue
class Solution {
    
    
public:
    vector<int> preorderTraversal(TreeNode* root) {
    
    
        vector<int> result;
        stack<TreeNode*> st;
        if (root == nullptr) return result;
        st.push(root);
        while (!st.empty()) {
    
      //栈不空
            TreeNode* p = st.top();
            result.push_back(p->val);
            st.pop();          //先将栈顶的结点出栈
            if (p->right != nullptr) st.push(p->right); //右孩子不空则入栈
            if (p->left != nullptr)  st.push(p->left);  //左孩子不空则入栈
        }
        return result;
    }
};
  • Intermediate sequence
在这里插入代码片
  • post-order
在这里插入代码片

Guess you like

Origin blog.csdn.net/Star_ID/article/details/126397995