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

二叉树层序遍历的两种写法(BFS和DFS)

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

二叉树层序遍历的两种写法(BFS和DFS)

力扣链接:102. 二叉树的层序遍历 - 力扣(LeetCode) (leetcode-cn.com)

写法1:BFS写法(通过队列辅助实现)
class Solution {
public:
    vector> levelOrder(TreeNode* root) {
        queueq;
        if(root) q.push(root);
        vector>res;
        while(!q.empty()){
            int size = q.size();//用常量size记录当前的队列中的结点数量
            vectortmp;
            for(int i=0;ival);
                q.pop();
                if(k->left)
                {
                    q.push(k->left);
                }
                if(k->right)
                {
                    q.push(k->right);
                }
            }
            res.push_back(tmp);//同时压入这一层结点的所有左右结点,我一开始也没看懂那个输出...
        }
        return res;
    }

};
写法2:递归写法(DFS写法)
class Solution {
public:
    vector>res;
    vector> levelOrder(TreeNode* root) {
        if(!root) return {};//空树返回空
        levelTraversal(root,0);
        return res;
    }
    void levelTraversal(TreeNode* root,int layer)
    {
        if(root)
        {
            if(res.size() == layer)//如果res中这一层还没有开辟vector存储空间,那么就进行开辟
            {
                res.push_back(vector());
            }
            res[layer].push_back(root->val);//将结点值存入对应层的结果数组
        }
        if(root->left)
        {
            levelTraversal(root->left,layer + 1);   
        }
        if(root->right)
        {
            levelTraversal(root->right,layer + 1);   
        }
    }

};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779560.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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