二叉树的前中后序遍历简单的递归

Posted 米糯Nommy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的前中后序遍历简单的递归相关的知识,希望对你有一定的参考价值。

二叉树的遍历 无外乎广度和深度 其中深度又分为前中后序遍历三种情况  这三种遍历若只是递归方法 自然很是简单 但递归代码简单 若嵌套层次太深 会栈溢出

 

二叉树节点数据结构:

struct Binary_node
{
    int val;
    Binary_node *left;
    Binary_node *right;
    Binary_node(int v = 0, Binary_node *le = nullptr, Binary_node *ri = nullptr) :val(v), left(le), right(ri)
    {}
};

二叉树类:

class BinaryTree
{
public:
    struct Binary_node *root;

    BinaryTree(Binary_node *pnode = nullptr) : root(pnode){}
    ~BinaryTree(){}

    void pre_order_recur(Binary_node *root, std::vector<int> &res);
    void in_order_recur(Binary_node *root, std::vector<int> &res);
    void post_order_recur(Binary_node *root, std::vector<int> &res);

    std::vector<int> pre_order_iter(Binary_node *root);
    std::vector<int> in_order_iter(Binary_node *root);
    std::vector<int> post_order_iter(Binary_node *root);

    //广度遍历
    std::vector<int> level_trave(Binary_node *root);
};

前中后序遍历的递归方法  不多做说明 太简单:

void BinaryTree::pre_order_recur(Binary_node *root, std::vector<int> &res)
{
    if (root)
    {
        res.push_back(root->val);
        pre_order_recur(root->left, res);
        pre_order_recur(root->right, res);
    }
}
void BinaryTree::in_order_recur(Binary_node *root, std::vector<int> &res)
{
    if (root)
    {
        in_order_recur(root->left, res);
        res.push_back(root->val);
        in_order_recur(root->right, res);
    }
}
void BinaryTree::post_order_recur(Binary_node *root, std::vector<int> &res)
{
    if (root)
    {
        post_order_recur(root->left, res);
        post_order_recur(root->right, res);
        res.push_back(root->val);
    }
}

 

以上是关于二叉树的前中后序遍历简单的递归的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的前序中序后序遍历相互求法

二叉树的前中后序递归和非递归遍历操作代码

二叉树的前中后序遍历(非递归实现)

必须掌握,二叉树的前中后序遍历(迭代+递归)详细代码与思路

非递归实现二叉树的前中后序遍历

经典面试题--二叉树的前中后序遍历(递归&非递归)