广度优先遍历、深度优先遍历js实现

本文详细介绍了深度优先遍历(DFS)和广度优先遍历(BFS)在二叉树中的应用,通过实例演示了如何用JavaScript实现这两种算法,并对比了它们的遍历策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

  • 深度优先遍历:自上而下的遍历
  • 广度优先遍历:逐层遍历

例如一个二叉树,每次遍历优先找叶子节点就是深度优先,每次先找同一层次的节点就是广度优先

一、深度优先

  var tree = [
    {
      name: "中国",
      children: [
        {
          name: "北京",
          children: [
            {
              name: "海淀区",
            },
            {
              name: "昌平区",
            },
          ],
        },
        {
          name: "浙江省",
          children: [
            {
              name: "杭州市",
            },
            {
              name: "嘉兴市",
            }
          ],
        },
      ],
    }
  ];
 function shendu(data){
    const result = []
    data.forEach(item=>{
      var map = (data)=>{
        result.push(data.name)
        data.children && data.children.forEach(item=>map(item))
      }
      map(item)
    })
    return result
  }
  let res = shendu(tree)
  console.log(res)  //  ['中国', '北京', '海淀区', '昌平区', '浙江省', '杭州市', '嘉兴市']

二、广度优先

  function guangdu(data){
    var result = []
    var arr = data
    while(arr.length >0){
      [...arr].forEach((item)=>{
        result.push(item.name)
        item.children && arr.push(...item.children)
        arr.shift()
      })
    }
    return result
  }
  let res = guangdu(tree)
  console.log(res)   // ['中国', '北京', '浙江省', '海淀区', '昌平区', '杭州市', '嘉兴市']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霜叶w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值