使用JS求解树的根节点到指定节点的路径

401 阅读1分钟

给定一个树和一个key值,树必须有id和children属性。通过遍历求解根节点到指定节点的路径,可以得到层级关系的字符串。可能的适用场景,通过用户部门id显示公司到部门的一个完整部门信息。

输入:  树形结构的列表,有id和children和当前节点的key值  
输出:  根节点到当前节点的路径  
// 计算完整路径  
    gitFullName(treeData, key) {  
      // 为节点添加parentId,并维护id节点对象方便查找  
      function addParent(tree = [], parId) {  
        tree.forEach((item, index, arr) => {  
          arr[index]['parentId'] = parId;  
          map.set(item.id, item);  
          if (item.children) {  
            addParent(item.children, item.id);  
          } else {  
            return;  
          }  
        });  
      }  
      // 递归遍历树  
      function reTree(key, map) {  
        let node = map.get(key);  
        if (!node) return;  
        let pid = node.parentId;  
        let name = node.name;  
        fullPath.unshift(name);  
  
        reTree(pid, map);  
      }  
  
      let data = JSON.parse(JSON.stringify(treeData));  
      let map = new Map();  
      let fullPath = [];  
      addParent(data, 'null');  
      reTree(key, map);  
      return fullPath;  
    }

注意:代码是vue2的写法