美文网首页
二叉树的先序中序后序访问

二叉树的先序中序后序访问

作者: 程一刀 | 来源:发表于2020-12-08 19:51 被阅读0次
二叉树的先序/后序/中序 的递归访问
class SolutionA{
    vector<int> result;//保存访问的值
    void preTraversal(TreeNode* root){//先序访问
        if (root == nullptr) {
            return;
        }
        result.push_back(root->val);
        preTraversal(root->left);
        preTraversal(root->right);
    }
    void middleTraversal(TreeNode* root){//中序访问
        if (root == nullptr) {
            return;
        }
        middleTraversal(root->left);
        result.push_back(root->val);
        middleTraversal(root->right);
    }

    void afterTraversal(TreeNode* root){//后序访问
        if (root == nullptr) {
            return;
        }
        afterTraversal(root->left);
        afterTraversal(root->right);
        result.push_back(root->val);

    }
};

二叉树的先序/后序/中序 的迭代访问 (向递归一样完美)

class SolutionB{
    vector<int> result;//保存访问的值
    stack<TreeNode*>stk;
    void preTraversal(TreeNode* root){//先序访问
        if (root ==nullptr) {
            return;
        }
        stk.push(root);
        while (stk.size() >0) {
            TreeNode *temp = stk.top();
            if (temp != nullptr) {
                stk.pop();
                if (temp->right) {
                    stk.push(temp->right);
                }
                if (temp->left) {
                    stk.push(temp->left);
                }
                stk.push(temp);
                stk.push(nullptr);
            }
            else{
                stk.pop();//弹走 null
                temp = stk.top();
                stk.pop();
                result.push_back(temp->val);
            }
        }
    }
    void middleTraversal(TreeNode* root){//中序访问
        if (root ==nullptr) {
            return;
        }
        stk.push(root);
        while (stk.size() >0) {
            TreeNode *temp = stk.top();
            if (temp != nullptr) {
                stk.pop();
                if (temp->right) {
                    stk.push(temp->right);
                }
                stk.push(temp);
                stk.push(nullptr);

                if (temp->left) {
                    stk.push(temp->left);
                }
            }
            else{
                stk.pop();//弹走 null
                temp = stk.top();
                stk.pop();
                result.push_back(temp->val);
            }
        }
    }

    void afterTraversal(TreeNode* root){//后序访问
        if (root ==nullptr) {
            return;
        }
        stk.push(root);
        while (stk.size() >0) {
            TreeNode *temp = stk.top();
            if (temp != nullptr) {
                stk.push(temp);
                stk.push(nullptr);
                stk.pop();
                if (temp->right) {
                    stk.push(temp->right);
                }
                if (temp->left) {
                    stk.push(temp->left);
                }
            }
            else{
                stk.pop();//弹走 null
                temp = stk.top();
                stk.pop();
                result.push_back(temp->val);
            }
        }

    }
};


参考链接 https://mp.weixin.qq.com/s/WKg0Ty1_3SZkztpHubZPRg

相关文章

  • 二叉树的先序中序后序访问

    二叉树的先序/后序/中序 的递归访问 二叉树的先序/后序/中序 的迭代访问 (向递归一样完美) 参考链接 http...

  • 二叉树的前序遍历、中序遍历、后序遍历、层次遍历

    二叉树的遍历方式主要有:先序遍历、中序遍历、后序遍历、层次遍历。先序、中序、后序其实指的是父节点被访问的次序。若在...

  • 三个树构造算法

    已知先序和后序构造正则二叉树 已知先序和中序构造二叉树 已知中序和后序构造二叉树

  • 二叉树知识(BST) 二叉查找树(Binary Search T

    二叉树基础知识总结 - CSDN博客 二叉树遍历分析 简单二叉树遍历,可分为:先序,中序,后序。 先序: 1.访问...

  • 二叉树的操作

    /*主要内容:1、实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式*/ 实现二叉树的先序、中序、后序遍历...

  • 1. 二叉树的遍历 二叉树的遍历可以有三种 : 先序、 中序、 后序遍历 。先序是根左右 ,中序是左根右 ,后序是...

  • 二叉树遍历算法

    二叉树遍历算法有4种,先序、中序、后序和层序遍历 先序遍历:先根、后左、再右中序遍历:先左、后根、再右后序遍历:先...

  • 二叉树

    题目1:画一个10个节点的二叉树,并写出它的先序,中序,后序遍历结果: 先序遍历:(1)访问根节点;(2)...

  • 二叉树的先序,中序,后序遍历?

    题目描述 二叉树的先序,中序,后序遍历 代码实现

  • 二叉树的常用算法

    如果将打印安排在同个数字第一次被访问时,即先序遍历第二次即中序遍历第三次即后序遍历现二叉树的先序、中序、后序遍历,...

网友评论

      本文标题:二叉树的先序中序后序访问

      本文链接:https://www.haomeiwen.com/subject/vbmviktx.html