问题描述今天去面试,题目是对一个对象中的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));
添加回答
举报
0/150
提交
取消