为了账号安全,请及时绑定邮箱和手机立即绑定

js如何获取tree型数组的最大深度呢?

js如何获取tree型数组的最大深度呢?

隔江千里 2019-02-26 12:15:12
js如何获取tree型数组中当前项的最大深度呢?const treeData = [    {        key: 'tree1',        children: [            {                key: 'tree2',                children: [                    {                        key: 'tree3',                        children: [                            {                                key: 'tree4'                            }                        ]                    }                ]            },            {                key: 'tree5'            }        ]    },    {        key: 'tree6'    },    {        key: 'tree7'    }]想获得的结果console.log(getMaxDepthByKey('tree1',treeData))  结果为3console.log(getMaxDepthByKey('tree2',treeData))  结果为2console.log(getMaxDepthByKey('tree3',treeData))  结果为1console.log(getMaxDepthByKey('tree4',treeData))  结果为0console.log(getMaxDepthByKey('tree5',treeData))  结果为0console.log(getMaxDepthByKey('tree6',treeData))  结果为0console.log(getMaxDepthByKey('tree7',treeData))  结果为0
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

经典的深度优先搜索,只有一个数据么,如果是的话,可以预处理下:

let ans = {}


function getMaxDepthByKey(treeData) {

  for (let item of treeData) {

    getDepth(item)

  }


  function getDepth(obj) {

    if (obj.hasOwnProperty('children')) {

      ans[obj.key] = 0

      for (let item of obj.children)

        ans[obj.key] = Math.max(ans[obj.key], getDepth(item) + 1) 

      return ans[obj.key]

    } else {

      ans[obj.key] = 0

      return 0

    }

  }

}


getMaxDepthByKey(treeData)


console.log(ans['tree1']) // 3

console.log(ans['tree2']) // 2

console.log(ans['tree3']) // 1

console.log(ans['tree4']) // 0

console.log(ans['tree5']) // 0

console.log(ans['tree6']) // 0

console.log(ans['tree7']) // 0

但是题主对调用方式做了固定,稍微改下即可

查看完整回答
反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 402 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信