栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

二叉树的层次遍历、前序遍历、中序遍历、后序遍历(C++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二叉树的层次遍历、前序遍历、中序遍历、后序遍历(C++)

题目

给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是 {3,9,20,#,#,15,7},

该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]

数据范围:二叉树的节点数满足 1<=n<=10^5

收获

1:这次二叉树的编写使得自己对树结构更加熟悉了~,学会了创建树的基本结构,以及相应的遍历输出
2:遇到的问题是最开始对树的创建方式void并不知道具体是什么意思,以为是按照层次遍历的方法输出的树,仔细一研究才发现是先序遍历输入的树(这里可以研究一下层次遍历创建树怎么创建?)
3:对&符号的不理解,参考博文最开始并不明白为什么有的地方是*,有的地方是&,‘&’的意义是什么呢?后来学习之后才发现是引用的意思,即对&符号后面变量的操作等同于对前面的操作,可以直接对值进行改变,一改以往必须设置对应的指针才会真正改变其中的值(还有需要注意的是如果对自己创建的结构struct要使用&的话,需要在前面加上typedef才可以

代码

演示结果

对应的二叉树:

#include 
#include 

using namespace std;

typedef struct TreeNode{
    TreeNode *left;
    TreeNode *right;
    int val;
}TreeNode,*BiTree;

//这里的取址是引用的意思,在主函数调用参数则直接对参数进行修改等效~在使用的时候记得对该类型声明typedef
void CreateTree(BiTree &root){
    int num;
    cin>>num;
    //cout<
        root=new TreeNode();
        root->val=num;
        CreateTree(root->left);
        CreateTree(root->right);
    }
}

//层次遍历
vector > levelOrder(TreeNode *root){
    vector >res;
    if(root==NULL)
        return res;
    queueq;
    q.push(root);
    TreeNode *cur;
    while(!q.empty()){
        vector row;
        int n=q.size();
        for(int i=0;i
            cur=q.front();
            q.pop();
            cout<val;
            row.push_back(cur->val);
            if(cur->left)
                q.push(cur->left);
            if(cur->right)
                q.push(cur->right);
        }
        res.push_back(row);
    }
    return res;
}

//先序遍历
void preorder(vector&res,TreeNode* root){
    if(root==NULL)
        return;
    res.push_back(root->val);
    cout<val;
    preorder(res,root->left);
    preorder(res,root->right);
}
vectorfirstOrder(TreeNode *root){
   vector res;
   preorder(res,root);
   return res;
}

//中序遍历
void midorder(vector&res,TreeNode* root){
   if(root==NULL)
    return;
   midorder(res,root->left);
   res.push_back(root->val);
   cout<val;
   midorder(res,root->right);
}
vector mediumorder(TreeNode* root){
    vectorres;
    midorder(res,root);
    return res;
}

//后序遍历
void laorder(vector&res,TreeNode* root){
   if(root==NULL)
    return;
   midorder(res,root->left);
   midorder(res,root->right);
   res.push_back(root->val);
   cout<val;
}
vector lastorder(TreeNode* root){
    vectorres;
    laorder(res,root);
    return res;
}

int main()
{
    BiTree root;
    CreateTree(root);
    cout<<"二叉树创建完成"<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1037358.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号