当前位置:网站首页>416-二叉树(前中后序遍历—迭代法)

416-二叉树(前中后序遍历—迭代法)

2022-06-24 09:33:00 liufeng2023

1、前序遍历(迭代法)

为什么要先加入 右孩子,再加入左孩子呢?

因为这样出栈的时候才是中左右的顺序。

class Solution {
    
public:
    vector<int> preorderTraversal(TreeNode* root) {
    
        stack<TreeNode*> st;
        vector<int> result;
        if (root == NULL) return result;
        st.push(root);
        while (!st.empty()) {
    
            TreeNode* node = st.top();                       // 中
            st.pop();
            result.push_back(node->val);
            if (node->right) st.push(node->right);           // 右(空节点不入栈)
            if (node->left) st.push(node->left);             // 左(空节点不入栈)
        }
        return result;
    }
};

2、中序遍历(迭代法)

class Solution {
    
public:
    vector<int> inorderTraversal(TreeNode* root) {
    
        vector<int> result;
        stack<TreeNode*> st;
        TreeNode* cur = root;
        while (cur != NULL || !st.empty()) {
    
            if (cur != NULL) {
     // 指针来访问节点,访问到最底层
                st.push(cur); // 将访问的节点放进栈
                cur = cur->left;                // 左
            } else {
    
                cur = st.top(); // 从栈里弹出的数据,就是要处理的数据(放进result数组里的数据)
                st.pop();
                result.push_back(cur->val);     // 中
                cur = cur->right;               // 右
            }
        }
        return result;
    }
};

3、后序遍历(迭代法)

在这里插入图片描述

class Solution {
    
public:
    vector<int> postorderTraversal(TreeNode* root) {
    
        stack<TreeNode*> st;
        vector<int> result;
        if (root == NULL) return result;
        st.push(root);
        while (!st.empty()) {
    
            TreeNode* node = st.top();
            st.pop();
            result.push_back(node->val);
            if (node->left) st.push(node->left); // 相对于前序遍历,这更改一下入栈顺序 (空节点不入栈)
            if (node->right) st.push(node->right); // 空节点不入栈
        }
        reverse(result.begin(), result.end()); // 将结果反转之后就是左右中的顺序了
        return result;
    }
};

原网站

版权声明
本文为[liufeng2023]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Edward_LF/article/details/125431241