二叉树的前序便利,中序遍历,后序遍历

前序遍历:

  • 递归:
  • class Solution {
    public:
        void preorder(TreeNode *root, vector<int> &res) {
            if (root == nullptr) {
                return;
            }
            res.push_back(root->val);
            preorder(root->left, res);
            preorder(root->right, res);
        }
    
        vector<int> preorderTraversal(TreeNode *root) {
            vector<int> res;
            preorder(root, res);
            return res;
        }
    };
    
    作者:力扣官方题解
    链接:https://leetcode.cn/problems/binary-tree-preorder-traversal/solutions/461821/er-cha-shu-de-qian-xu-bian-li-by-leetcode-solution/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 迭代:
  • class Solution {
    public:
        vector<int> preorderTraversal(TreeNode* root) {
            vector<int> res;
            if (root == nullptr) {
                return res;
            }
    
            stack<TreeNode*> stk;
            TreeNode* node = root;
            while (!stk.empty() || node != nullptr) {
                while (node != nullptr) {
                    res.emplace_back(node->val);
                    stk.emplace(node);
                    node = node->left;
                }
                node = stk.top();
                stk.pop();
                node = node->right;
            }
            return res;
        }
    };
    
    作者:力扣官方题解
    链接:https://leetcode.cn/problems/binary-tree-preorder-traversal/solutions/461821/er-cha-shu-de-qian-xu-bian-li-by-leetcode-solution/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

中序遍历:

  • 递归:
class Solution {
public:
    void inorder(TreeNode* root, vector<int>& res) {
        if (!root) {
            return;
        }
        inorder(root->left, res);
        res.push_back(root->val);
        inorder(root->right, res);
    }
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> res;
        inorder(root, res);
        return res;
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/binary-tree-inorder-traversal/solutions/412886/er-cha-shu-de-zhong-xu-bian-li-by-leetcode-solutio/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 迭代:
class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> res;
        stack<TreeNode*> stk;
        while (root != nullptr || !stk.empty()) {
            while (root != nullptr) {
                stk.push(root);
                root = root->left;
            }
            root = stk.top();
            stk.pop();
            res.push_back(root->val);
            root = root->right;
        }
        return res;
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/binary-tree-inorder-traversal/solutions/412886/er-cha-shu-de-zhong-xu-bian-li-by-leetcode-solutio/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

后序遍历:

递归:
class Solution {
public:
    void postorder(TreeNode *root, vector<int> &res) {
        if (root == nullptr) {
            return;
        }
        postorder(root->left, res);
        postorder(root->right, res);
        res.push_back(root->val);
    }

    vector<int> postorderTraversal(TreeNode *root) {
        vector<int> res;
        postorder(root, res);
        return res;
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/binary-tree-postorder-traversal/solutions/431066/er-cha-shu-de-hou-xu-bian-li-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
迭代:
class Solution {
public:
    vector<int> postorderTraversal(TreeNode *root) {
        vector<int> res;
        if (root == nullptr) {
            return res;
        }

        stack<TreeNode *> stk;
        TreeNode *prev = nullptr;
        while (root != nullptr || !stk.empty()) {
            while (root != nullptr) {
                stk.emplace(root);
                root = root->left;
            }
            root = stk.top();
            stk.pop();
            if (root->right == nullptr || root->right == prev) {
                res.emplace_back(root->val);
                prev = root;
                root = nullptr;
            } else {
                stk.emplace(root);
                root = root->right;
            }
        }
        return res;
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/binary-tree-postorder-traversal/solutions/431066/er-cha-shu-de-hou-xu-bian-li-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐

  1. 便利

    2024-06-09 02:40:02       9 阅读
  2. 非递归|

    2024-06-09 02:40:02       46 阅读
  3. 2024-06-09 02:40:02       20 阅读
  4. 2024-06-09 02:40:02       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-09 02:40:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-09 02:40:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-09 02:40:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-09 02:40:02       18 阅读

热门阅读

  1. AI学习指南机器学习篇-决策树基本原理

    2024-06-09 02:40:02       9 阅读
  2. 利用Pandas进行数据清洗与过滤:Python实战指南

    2024-06-09 02:40:02       9 阅读
  3. 树莓派【Raspberry Pi-64位】3b+,Pi4J 2.0入门

    2024-06-09 02:40:02       9 阅读
  4. Vue3相关语法内容,组件传值

    2024-06-09 02:40:02       7 阅读
  5. Linux

    2024-06-09 02:40:02       7 阅读
  6. 前端如何封装自己的npm包并且发布到npm注册源

    2024-06-09 02:40:02       9 阅读
  7. Bean的作用域

    2024-06-09 02:40:02       9 阅读
  8. 对硬盘的设想2:纸存,硬指针,软指针

    2024-06-09 02:40:02       9 阅读