数组的递归调用,对广度优先和深度优先对比

// 测试数据
var arr=[
  {
    id:1,
    chlid:[
      {
        id:11,
        chlid:[
          {
            id:111,
            chlid:[]
          },
          {
            id:112,
            chlid:[]
          }
        ]
      },
      {
        id:12,
        chlid:[]
      }
    ]
  },
  {
    id:2,
    chlid:[
      {
        id:21,
        chlid:[
          {
            id:211,
            chlid:[]
          },
          {
            id:212,
            chlid:[]
          }
        ]
      },
      {
        id:22,
        chlid:[]
      }
    ]
  },
  {
    id:3,
    chlid:[
      {
        id:31,
        chlid:[
          {
            id:311,
            chlid:[]
          },
          {
            id:312,
            chlid:[]
          }
        ]
      },
      {
        id:32,
        chlid:[]
      }
    ]
  }
]

// 广度优先 BFS
const bfsArr=[]
function bfs(arr){
  const temp=[]
  arr.forEach(item=>{
  	bfsArr.push(item.id)
    if(item.chlid.length>0){
      temp.push(...item.chlid)
    }
  })
  temp.length>0&&bfs(temp)
}
bfs(arr)
console.log(bfsArr)
// [1, 2, 3, 11, 12, 21, 22, 31, 32, 111, 112, 211, 212, 311, 312]

// 深度优先 DFS
const dfsArr=[]
function dfs(arr){
  arr.forEach(item=>{
  	dfsArr.push(item.id)
    if(item.chlid.length>0){
      dfs(item.chlid)
    }
  })
}
dfs(arr)
console.log(dfsArr)
// [1, 11, 111, 112, 12, 2, 21, 211, 212, 22, 3, 31, 311, 312, 32]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值