首页 > 其他分享 >二叉树-层序遍历

二叉树-层序遍历

时间:2024-04-15 09:34:11浏览次数:15  
标签:遍历 层序 depth vector que 二叉树 result

二叉树-层序遍历

之前所述二叉树的递归遍历或者迭代遍历都属于深度优先搜索,即先迭代或者递归到树的某一枝最深处再逐渐回退,再到另一支的最深处再逐渐回退,从而完成遍历。而层序遍历属于广度优先遍历,即一层一层去遍历。

需要借助队列辅助实现一层一层遍历的逻辑,因为其先进先出的逻辑。而栈先进后出的逻辑适合模拟深度优先遍历即递归的逻辑。

层序遍历结果为:[[6] ,[4 7], [1 3 5 8]]

//队列辅助实现二叉树的层序遍历
class Solution{
public:
	vector<vector<int>> levelOrder(TreeNode* root){
        queue<TreeNode*> que;//生成一个队列,队列里的元素是树的节点指针
        if(root!=NULL) que.push(root);
        vector<vector<int>> result;//存放遍历结果
        while(!que.empty()){
            int size = que.size();//que.size()在后续不断变化
            vector<int> vec;//存放当前层的遍历结果
            for(int i = 0;i<size;i++){
                TreeNode* node = que.front();
                que.pop();
                vec.push_back(node->val);
                if(node->left) que.push(node->left);
                if(node->right) que.psuh(node->right);
            }
            result.push_back(vec);
        }
     	return result;
    }
};
//递归实现
//实现流程还是按照深度优先遍历的思维,随着递归进入左边的最深处,相应的建立对应的vector<int>,然后回退并不断将相应层的节点元素填入至对应的vector<int>中,与上述队列的广度优先搜索即从根节点开始一层一层遍历不同
class Solution{
public:
    void order(TreeNode* cur,vector<vector<int>>& result,int depth){
        if(cur==nullptr) return;
        if(result.size()==depth) result.push_back(vector<int>());
        result[depth].push_back(cur->val);
        order(cur->left,result,depth+1);
        order(cur->right,result,depth+1);
    }
    vector<vector<int>> levelorder(TreeNode* root){
		vector<vector<int>> result;
        int depth = 0;
        order(root,result,depth);
        return result;
    }
}

标签:遍历,层序,depth,vector,que,二叉树,result
From: https://www.cnblogs.com/perngfey-note/p/18135152

相关文章

  • 二叉树中序和后序遍历表达式
    什么是二叉树二叉树是一种树形结构,每个节点最多有两个子节点。其中,左子节点的值小于等于父节点的值,右子节点的值大于等于父节点的值。这种特殊的结构使得二叉树在搜索、排序等方面有着广泛的应用。二叉树的遍历方式二叉树的遍历方式有三种:前序遍历、中序遍历和后序遍历。其中,前......
  • 在python中实现二叉树
    二叉树设计定义节点类classNode:#修改初始化方法definit(self,value):self.value=value#节点值self.left=None#左子树self.right=None#右子树定二叉树类classBinaryTree:#修改初始化方法definit(self,root=None):self.root=root#根节点#定......
  • 二叉树简介
    本篇目录树的相关概念树的种类二叉树的概念和性质二叉树的广度优先遍历二叉树的深度优先遍历树的相关概念数据结构大致上分为线性结构和非线性结构,线性结构指的是元素之间存在着“一对一”的线性关系的数据结构;非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱......
  • 算法技巧_二叉树
    算法技巧(二叉树)目录算法技巧(二叉树)两种解题思路最简单的遍历二叉树代码遍历二叉树的方式前中后序遍历的区别以及各自场景技巧典型问题常见题目以及解题思路两种解题思路遍历一遍树是否可以解决问题如果可以,用一个traverse函数配合外部变量来实现。分解问题是否可以定......
  • Qt 如何遍历序列容器(QVector|QMap|...)
    QT提供了两种风格的遍历器:Java和STL一、Java风格遍历器Java风格的遍历器是Qt首先推荐使用的形式。这种风格比起STL风格的遍历器更方便。方便的代价就是不如后者高效。Java风格的遍历器指向的是两个元素之间的位置,而不是指向元素本身。因此,它们可能会指向集合第一......
  • 数据结构之二叉树(java语言版)
    之前的都是线性结构,而树结构在计算机应用中的应用更加广泛。linux中的目录结构,某些数据库的底层存储等,都是采用树结构进行构架的。树的概念线性表是一对一的关系,而树是一对多的关系。树的结点:包含一个数据元素及若干指向子树的分支;孩子结点:结点的子树的根称为该结点的孩子;双......
  • 数据结构之二叉树(c语言版)
    之前的都是线性结构,而树结构在计算机应用中的应用更加广泛。linux中的目录结构,某些数据库的底层存储等,都是采用树结构进行构架的。树的概念线性表是一对一的关系,而树是一对多的关系。树的结点:包含一个数据元素及若干指向子树的分支;孩子结点:结点的子树的根称为该结点的孩子;双......
  • 2024-04-11 记录日常业务之遍历对象并删除不符合条件的属性
    为什么要记录,因为很少遇到这种奇葩的需求,后端要我不要返回对象中所有值为-1的字段,我就纳了闷了,你就不能自己处理吗??好了,不吐槽了,主要是较少去处理遍历对象的操作(历来都是遍历数组),所以在这里做个记录:letparams={ a:10, b:6, c:-1, d:11, e:19, f:-1,......
  • Java List集合去重、过滤、分组、获取数据、求最值、合并、排序、跳数据和遍历
    前言请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、准备工作:现有一个User类、Student类和Ticket类,加入相关依赖@DatapublicclassUser{/***id*/privateIntegerid;/***姓名*/privateStringname;/**......
  • 树与二叉树相关习题
    哎呀,因为最近实在是太忙了(忙着学数据结构刷算法题),当然也有点小摆烂,更新没有跟上,第一篇博文比较水,这一篇争取做得高质量。接下来我会发出我的课程实验作业之类的东西,欢迎大家点评不足!!!1.(单选题)二叉树的深度为k,则二叉树最多有()个结点。A.2kB.2k-1(2的k次方减1)C.2k-1(2......