数组通过pid转为树结构算法

文章讲述了作者在面试中被要求现场编写一个将数组转换为树形结构的递归算法的经历,探讨了不同解决思路和算法效率对面试表现的影响。作者认为虽然算法本身不复杂,但面试时的表现可能影响评分,鼓励尝试和展示自己的能力。
摘要由CSDN通过智能技术生成

直接上代码:

function arrayToTree(array, id=1, data={ id: 1, pid: 0 }) {
// 默认父节点为1, data 为 {}
    let result = [];
    for (let arr of array) {//循环获取子节点
        if (arr.pid == id) {
            result.push(arr);
        }
    }
    data.children = result; // 处理id为xxx 下的所有子节点
    let temp = data.children
    for (let res of result) {//获取子节点的子节点
        arrayToTree(array, res.id, res);//递归获取子节点
    }
    return data;
  }

  const array = [
    { id: 1, pid: 0 }, // Root node
    { id: 2, pid: 1 }, // Child of node 1
    { id: 5, pid: 2 }, // Child of node 2
    { id: 3, pid: 1 }, // Child of node 1
    { id: 4, pid: 2 }, // Child of node 2
    { id: 6, pid: 3 }, // Child of node 3
    { id: 7, pid: 3 } // Child of node 3
  ];
  console.log(JSON.stringify(arrayToTree(array)));
{
	"id":1,
	"pid":0,
	"children":[{
		"id":2,
		"pid":1,
		"children":[{
			"id":5,
			"pid":2,
			"children":[]
			},{
			"id":4,
			"pid":2,
			"children":[]
			}
		]},{
		"id":3,
		"pid":1,
		"children":[{
			"id":6,
			"pid":3,
			"children":[]
			},{
			"id":7,
			"pid":3,
			"children":[]
		}]
	}]
}

前两天面试让我当场写算法,大致结构写出来了,但是没跑成功,今天重新写了一次。但是我很疑惑,这个算法如果是第一次写的话 我的耗时大概是两个小时左右,如果我之前写过的话我可能十几分钟就写出来了,它能作为考察面试合格的一个依据么?????????
各位面试官手下留情啊。

思路:看到这个题,无非就是递归算法。递归算法的写法就是 先找出第一项,再找出n+1 项。

  1. 第一种解决方案就是传入的数组先给排序,然后每次执行shift,让传入的数组长度减1,等数组长度为0时,执行完成。面试的时候就是走的这个思路,但是每一项执行完成后数据的收集出了问题。
  2. 第二种思路就是现在这个办法,就是每次处理都把数据收集起来,等处理结束,数据也就收集完成了。

总之:我个人认为面试时写算法完全没有必要,因为就是一个递归,也不要觉得算法很难,反正我面试时看到算法就脑子一片空白,哈哈哈哈,但是希望大家还是要尝试去写。总有好的面试官会慧眼识英雄的,虽然如果没写出来会很减分,但是要去尝试啊,要向面试官展示咱肚子有货啊。害,加油把!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值