数据结构二叉树前中后遍历

力扣数据结构基础题–二叉树前、中、后序遍历

题目来源

题目来自于力扣刷题网站数据结构的一个学习计划
如图:数据结构二叉树前中后遍历_第1张图片

题目介绍

这次说的是第10天学习计划,(这其实之前就开启了这个计划,过了时间又重新开始,有能力的同学完全可以去搜索题号提前做后面天数的学习计划)
题号分别是P144、P94、P145。
其中P144题图

前序遍历

数据结构二叉树前中后遍历_第2张图片
数据结构二叉树前中后遍历_第3张图片
先上代码吧!(依旧使用的是C++)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution 
{
public:
    void putout(TreeNode *root, vector<int> &zsd) 
    {
        if (root == nullptr)  //判断它是否为空节点
        {
            return;
        }
        zsd.push_back(root->val);   //先输出当前节点的值
        putout(root->left, zsd);    //遍历左边树节点
        putout(root->right, zsd);   //右边
    }

    vector<int> preorderTraversal(TreeNode *root) {
        vector<int> zsd;    //使用vector容器
        putout(root, zsd);
        return zsd;
    }
};

这里使用的递归思想,再利用STL中的vector容器。

中序遍历

中序遍历就是把输出的时候放在中间。

class Solution {
public:
    void output(TreeNode* root, vector<int>& res) {
        if (!root) {
            return;
        }
        output(root->left, res);  //先遍历左边
        res.push_back(root->val);   //再输出
        output(root->right, res);  //再遍历右边
    }
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> res;
        output(root, res);
        return res;
    }
};

后序遍历

直接也上代码吧,和前序遍历差不了多少.

//这里偷个懒,就不写注释了,然后官方给的树的结构也不展示了,占空间。
class Solution {
public:

    void output(TreeNode* root,vector<int> & lxx)
    {
        if(!root)
        {
            return;
        }
        output(root->left, lxx);
        output(root->right, lxx);
        lxx.push_back(root->val);
    }

    vector<int> postorderTraversal(TreeNode* root) 
    {
        vector<int> lxx;
        output(root,lxx);
        return lxx;
    }
};

题目总结

此次相关的数据结构是二叉树,涉及它遍历的先后顺序关系,属于基础题,入门题,需要熟练掌握。

此次题目就讲到这里,在校萌新非科班大学牲,努力学习编程,关注我,一起学习,我会不定期更新的(希望达到定期)。

你可能感兴趣的:(leetcode,数据结构,算法,c++)