JS树的遍历:广度优先遍历与深度优先遍历

news/2024/7/19 16:30:26 标签: 算法, 数据结构, js

JS树的遍历:广度优先遍历与深度优先遍历

先定义一颗简单的树:

let tree = [
    {
        label:'a',
        children:[
            {
                label:'b',
                children:[
                    {
                        label:'d'
                    },
                    {
                        label:'e'
                    }
                ]
            },
            {
                label:'c',
                children:[
                    {
                        label:'f'
                    }
                ]
            }
        ]
    }
]

在这里插入图片描述

树的广度优先遍历
广度优先遍历:从上往下对每一层依次访问,对于上面这颗树的遍历顺序为abcdef(此处算法对应到二叉树上,属于先序遍历)
在这里插入图片描述
实现代码:

let bf=function(tree){
    let queue =tree;
    for(let i=0;i<queue.length;i++){
        console.log(queue[i])
        if(queue[i].children) {queue=queue.concat(queue[i].children)}
    }
}

输出为:
在这里插入图片描述

树的深度遍历
深度遍历:对每一个可能的分支路径深入到不能再深入为止,对于上面这颗树的遍历顺序为abdecf
在这里插入图片描述
实现:

let df=function(tree){
    let nodes=[];
    if(tree){
        let stack=[];
        stack.push(tree);
        while(stack.length!=0){
            let item =stack.pop();
            console.log(item)
            nodes.push(item);
            children=item&&item.children?item.children:[];
            for(let i=children.length-1;i>=0;i--){
                stack.push(children[i]);
            }
        }
    }
}

输出为:
在这里插入图片描述


http://www.niftyadmin.cn/n/1355252.html

相关文章

php 论坛_杜蕾斯发文庆祝PHP语言25周年,文案一直被模仿,从未被超越

来自&#xff1a;快科技 http://www.kkj.cn1995年6月8日&#xff0c;PHP 1.0版本正式问世&#xff0c;目前已经更迭到7.4版本&#xff0c;PHP 8.0 Alpha1版本也有望于今年6月中旬发布。25周年之际&#xff0c;杜蕾斯官方微博发文庆祝&#xff1a;“#PHP语言25周年#不管PHP是不是…

如何轻松检查dom、查看dom层级

如何轻松检查dom、查看dom层级 效果&#xff1a; 像这样&#xff0c;每一层dom都以不同的颜色被标出。方便查看。 实现&#xff1a; * { background-color: rgba(255,0,0,.2)!important; } * * { background-color: rgba(255,0,255,.2)!important; } * * * { background-c…

base64转文件_文件和文件格式知多少

相关知识点1、了解base64和blob2、图像的数据类型3、了解httpUrl、dataUrl、objectUrl(blobUrl)4、了解Blob、File、BlobURL、DataURL之间的关系以及互相转换5、如何获取Blob数据和File数据知识点介绍一、了解base64和blob1、base64Base64就是一种 基于64个可打印字符来表示二进…

js递归解耦(arguments.callee的使用)

js递归解耦&#xff08;arguments.callee的使用&#xff09; 起因&#xff1a; 递归时我们通常这么写&#xff1a; function recursion(num) {if(num>50){return num}else{return recursion(num 1);} }方法内必须保证方法名为‘recursion’&#xff0c;从而会导致紧密耦合…

模板类的析构函数如何写_如何写好领英LinkedIn的个人小结(附带模板)

许多人因为不知道如何写Summary于是干脆就不写&#xff0c;这个错过绝佳展示自己的舞台和做SEO的机会。Summary允许你写2000个字符&#xff0c;建议第一人称书写&#xff0c;这样看起来更加自然。大家可以通过一下几种模板写。第一种模板&#xff1a;直击客户痛点。作为一个外贸…

es修改mapping字段类型_Elasticsearch索引的基本操作(4)-Mapping设置

1、Mapping设置Mapping设置API _mapping &#xff0c;允许增加新的字段到指定索引中&#xff0c;或在满足一定的条件下修改已经存在的字段&#xff0c;需要使用PUT方法。1.1 增加新的字段到索引中增加一个new_name到已经存在的索引new_index中&#xff0c;操作如下&#xff1a;…

echarts报错 “export ‘default‘ (imported as ‘echarts‘) was not found in ‘echarts‘

echarts报错 "export ‘default’ (imported as ‘echarts’) was not found in ‘echarts’ ## 原因&#xff1a; 使用了echats5.0的版本&#xff0c;在import echarts from ‘echarts’;会出现这种问题 解决&#xff1a; 引入的地方改为 import * as echarts from ec…

js求对象数组差集

js求对象数组差集 直接上代码&#xff1a; function getDifferenceSet(arr1, arr2) {return arr1.map(JSON.stringify).concat(arr2.map(JSON.stringify)).filter((v, i, arr) > {return arr.indexOf(v) arr.lastIndexOf(v);}).map(JSON.parse);}效果&#xff1a;