老师,这里根本没有必要用Map来传递parentId

来源:9-6 -【连环问】把一个树转换为数组

自胜者强123

2022-07-05

这是我的简单方案

  let curNode = linkNode.pop()
  curNode.parentId = 0

  while (curNode) {
    const { id, name, parentId } = curNode
    res.push({ id, name, parentId })
    for (const item of curNode.children) {
      item.parentId = curNode.id
      linkNode.add(item)
    }
    curNode = linkNode.pop()
  }

第一个元素,默认parentId = 0就可以,遍历children的时候,当前子节点的parentId等于父节点的id就可以了

老师,有时候一些算法和手写代码的题目,看你写的代码,不是那么好理解,在手写代码的课程上面,学习进度非常慢

写回答

1回答

双越

2022-07-05

具体哪部分不好理解?

0
1
自胜者强123
有部分算法和手写代码不是那么好理解,有时候每个人的考虑场景不一样 比如这个 数组转树 function convert(arr: IArrayItem[]): ITreeNode | null { // 用于 id 和 treeNode 的映射 const idToTreeNode: Map = new Map() let root = null arr.forEach(item => { const { id, name, parentId } = item // 定义 tree node 并加入 map const treeNode: ITreeNode = { id, name } idToTreeNode.set(id, treeNode) // 找到 parentNode 并加入到它的 children const parentNode = idToTreeNode.get(parentId) if (parentNode) { if (parentNode.children == null) parentNode.children = [] parentNode.children.push(treeNode) } // 找到根节点 if (parentId === 0) root = treeNode }) return root } 老师的实现方式,就没有考虑到parentId后出现的场景,比如数据结构是这样的,这段代码就会有bug const arr = [ { id: 3, name: '部门C', parentId: 1 }, { id: 2, name: '部门B', parentId: 1 }, { id: 1, name: '部门A', parentId: 0 }, // 0 代表顶级节点,无父节点 ] 整体课程质量还是相当可以,比较结构化 不是说课程不好,只是说,部分题目的手写代码,不是那么好理解
2022-07-05
共1条回复

2周刷完100道前端优质面试真题 双越最新力作

『前端面试真题100道』视频详解

1509 学习 · 642 问题

查看课程