美文网首页
递归实现树结构

递归实现树结构

作者: 贪恋冬天的幸福 | 来源:发表于2019-10-26 12:53 被阅读0次

JS递归算法实现 数组树结构

  1. 根节点只有一个
function retrieve(arr) {
  //找出根节点
  let root = arr.find((val) => val.parent_id === null);
  return recursion(root, arr);
}

function recursion(element, arr) {
  let id = element.id;
  let childrens = arr.filter(v => v.parent_id === id);
  //如果存在子节点,对子节点进行递归算法
  childrens.length && childrens.forEach((v) => recursion(v, arr));
  //获取当前元素在数组中的所有子节点
  element.children = element.children ? element.children.concat(childrens) : [...childrens]
}

//将此数组转为树结构对象
let tree = retrieve([
   {id: 1, parent_id: null}, 
   {id: 2, parent_id: 1}, 
   {id: 3, parent_id: 1}, 
   {id: 4, parent_id: 2}, 
   {id: 5, parent_id: 4}]
);
console.log(tree);

得到树结构如下:


根节点对象

2.多个根节点
上例是指定只有一个根节点,可以快捷地找出父节点下的子节点,现在将上面例子改为 通用算法

function recursion(arr, id) {
  return Array.isArray(arr) && arr.filter((v) => v.parent_id === id).map((v) => ({...v, children: recursion(arr, v.id)}))
}

let tree = recursion([
   {id: 1, parent_id: null}, 
   {id: 2, parent_id: null}, 
   {id: 3, parent_id: 1}, 
   {id: 4, parent_id: 2}, 
   {id: 5, parent_id: 4}], null);
console.log(tree);

得到树结构数组:


根节点数组

相关文章

  • 【转】js数组和树结构数据相互转换

    数组转树结构采取递归和非递归两种方式,树结构转扁平化数组采取深度优先遍历(递归和非递归两种方式)和广度优先遍历实现...

  • 递归实现树结构

    JS递归算法实现 数组 转 树结构 根节点只有一个 得到树结构如下: 2.多个根节点上例是指定只有一个根节点,可以...

  • Java实现树结构数据的递归与非递归遍历

    Java实现树结构数据的递归与非递归遍历 ​ 递归,是我们常用的一种方式。在使用的过程中,递归会不断的调用当前...

  • Oracle 递归查询

    Oracle中的递归查询 主要是通过start with connect by prior语句实现对树结构的遍历。...

  • 扁平数据结构转Tree、递归等方法

    一维数组转成树结构,如下所示 1.不考虑性能实现,递归遍历查找 2.不用递归,也能搞定 3.最优性能 https:...

  • 二叉树的遍历(先序、中序、后序)

    树结构: 先序:递归:C++: 非递归:C++: 中序:递归:C++: 非递归:C++: 后序:递归:C++: 非...

  • java数据结构(四)

    关于树的基本概念可以查看此篇文章树、堆、集合 1、一般树的实现: 树结构可以由递归实现,也可以由链表实现:链表实现...

  • 07-13:二叉树review1

    二叉树review1: 1、二叉树结构 1)二叉树的遍历 0)递归/迭代实现 前/中/后序遍历 递归 迭代 层次遍...

  • 递归遍历树结构

    调用:

  • 数据结构-树的遍历

    1. 先序遍历 递归实现 非递归实现 2. 中序遍历 递归实现 非递归实现 3. 后序遍历 递归实现 非递归实现 ...

网友评论

      本文标题:递归实现树结构

      本文链接:https://www.haomeiwen.com/subject/zcqnvqtx.html