zoukankan      html  css  js  c++  java
  • 二叉树前中后序遍历递归法&迭代法

    1.1. 前序遍历--递归
    class Solution {
    public:
        vector<int> preorderTraversal(TreeNode* root) {
            // 递归
            vector<int> ans;
            preTravel(root, ans);
            return ans;
        }
        void preTravel(TreeNode* root, vector<int>& ans){
            if(root == nullptr) return;
            ans.push_back(root->val);           // 根
            preTravel(root->left, ans);         // 左
            preTravel(root->right, ans);        // 右
        }
    };
     
    1.2. 前序遍历--迭代
    class Solution {
    public:
        vector<int> preorderTraversal(TreeNode* root) {
            // 迭代
            vector<int> ans;
            if(root == nullptr) return ans;
            stack<TreeNode*> st;
            st.push(root);
            while(!st.empty()){
                TreeNode* cur = st.top();    
                st.pop();
                ans.push_back(cur->val);                            // 根
                if(cur->right != nullptr) st.push(cur->right);      // 右
                if(cur->left != nullptr) st.push(cur->left);        // 左    栈:先进后出,最后遍历结果是 根->左->右
            }
            return ans;
        }
    };
    

      

     
    2.1. 中序遍历--递归
    class Solution {
    public:
        vector<int> inorderTraversal(TreeNode* root) {
            vector<int> ans;
            inTravel(root, ans);
            return ans;
        }
        void inTravel(TreeNode* root, vector<int>& ans){
            if(root == nullptr) return;  
            inTravel(root->left, ans);               // 左
            ans.push_back(root->val);                // 根
            inTravel(root->right, ans);              // 右
        }
    };
     
    2.2. 中序遍历--迭代
    class Solution {
    public:
        vector<int> inorderTraversal(TreeNode* root) {
            vector<int> ans;
            if(root == nullptr) return ans;
            stack<TreeNode*> st;
            TreeNode* cur = root;
            while(cur != nullptr || !st.empty()){
                while(cur != nullptr){
                    st.push(cur);
                    cur = cur->left;
                }
                cur = st.top();
                st.pop();
                ans.push_back(cur->val);
                cur = cur->right;
            }
            return ans;
        }
    };
     
     
    3.1. 后序遍历--递归
    class Solution {
    public:
        vector<int> postorderTraversal(TreeNode* root) {
            vector<int> ans;
            postTravel(root, ans);
            return ans;
        }
        void postTravel(TreeNode* root, vector<int>& ans){
            if(root == nullptr) return;
            postTravel(root->left, ans);         // 左
            postTravel(root->right, ans);        // 右
            ans.push_back(root->val);            // 根
        }
    };
     
    3.2. 后序遍历--迭代
    class Solution {
    public:
        vector<int> postorderTraversal(TreeNode* root) {
            vector<int> ans;
            if(root == nullptr) return ans;
            stack<TreeNode*> st;
            st.push(root);
            while(!st.empty()){
                TreeNode* cur = st.top();  
                st.pop();
                ans.push_back(cur->val);                    // 根
                if(cur->left != nullptr) st.push(cur->left);        // 左
                if(cur->right != nullptr) st.push(cur->right);       // 右, 栈:先进后出,根->右->左
            }
            reverse(ans.begin(), ans.end());                  // 左->右->根
            return ans; 
        }
    };
    

      

  • 相关阅读:
    “TensorFlow 开发者出道计划”全攻略,玩转社区看这里!
    适合 C++ 新手学习的开源项目——在 GitHub 学编程
    【9303】平面分割
    【u114】旅行计划(12月你好)
    【u236】火炬
    【u233】单词化简
    Java Web整合开发(41) -- Forum
    1、服务器(软件)种类
    jquery trigger
    jQuery实现当按下回车键时绑定点击事件
  • 原文地址:https://www.cnblogs.com/tristatl/p/14825858.html
Copyright © 2011-2022 走看看