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

一道JS树状对象遍历算法题,求解?跪求!

一道JS树状对象遍历算法题,求解?跪求!

月关宝盒 2019-10-17 09:31:11
问题描述今天去面试,题目是对一个对象中的value属性做遍历求和,对象结构如下:varnodes={value:1,children:[{value:2,children:[{value:4,children:[...]},{value:3,children:[...]},...]},{value:5,children:[...]},...]}我当时写的答案如下functionsum(node){if(node.children.length===0){returnnode.value}else{returnnode.children.reduce((prev,curr)=>prev+sum(curr),node.value)}}sum(nodes)面试官说在数据量很大的情况下,用递归的性能会很差,所以这题不能用递归,我思前想后都觉得需要用到递归,最后只能请教面试官,被他批评说现在的程序员只会拍脑袋用递归,叫我回去看看DFS和BFS算法,但我看完后依然觉得需要用到递归,很苦恼,各路大神能否帮忙解答一下?
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

典型的层级遍历。与按层输出二叉树的节点思路相同。
varnodes={
value:1,
children:[
{
value:2,
children:[
{
value:4,
},
{
value:3,
},
]
},
{
value:5,
},
]
}
functionsum(nodes){
lets=0;
letlevel=[nodes];
letnextLevel=[];
while(level.length>0){
for(leti=0;is+=level[i].value;
if("children"inlevel[i]){
nextLevel=nextLevel.concat(level[i].children);
}
}
level=nextLevel;
nextLevel=[];
}
returns;
}
console.log(sum(nodes));
                            
查看完整回答
反对 回复 2019-10-17
  • 2 回答
  • 0 关注
  • 332 浏览
慕课专栏
更多

添加回答

举报

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