js中树结构的深度优先遍历(DFS)和广度优先遍历(BFS)

js中树结构的深度优先遍历(DFS)和广度优先遍历(BFS)
深度优先:先遍历完一个节点的所有子孙节点,自上而下。广度优先:先遍历同层节点,逐层遍历。
 const list = [            {                name: "河南",                children: [                    {                        name: "信阳",                        children: [                            { name: "商城" },                            { name: "固始" },                        ],                    },                    {                        name: "南阳",                        children: [                            { name: "镇平" },                            { name: "新野" }                        ],                    },                ],            },            {                name: "安徽",                children: [                    {                        name: "六安",                        children: [                            { name: "金寨" },                            { name: "霍邱" },                        ],                    },                    {                        name: "合肥",                        children: [                            { name: "肥东" },                            { name: "肥西" },                        ],                    },                ],            },    ];

深度优先(递归实现)
var dfs =  (function() {        var arr = []        return function(data) {            data.forEach(item => {                arr.push(item.name)                if (item.children && item.children.length > 0) {                    dfs(item.children)                }            });            return arr        }    })()var newData = dfs(list)  // ['河南', '信阳', '商城', '固始', '南阳', '镇平', '新野', '安徽', '六安', '金寨', '霍邱', '合肥', '肥东', '肥西']

广度优先(队列形式)
var bfs = (function() {        var arr = []        return function (data) {            for(var i = 0; i < data.length; i++) {              arr.push(data[i].name)              if (data[i].children && data[i].children.length > 0) {                  data.push(...data[i].children)  // 入队              }         }            return arr        }           })()var newData2 = bfs(list)  // ['河南', '安徽', '信阳', '南阳', '六安', '合肥', '商城', '固始', '镇平', '新野', '金寨', '霍邱', '肥东', '肥西']

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部