美文网首页
递归小练习

递归小练习

作者: 无缘霸哥 | 来源:发表于2020-08-17 11:26 被阅读0次

实现内容:
1、家谱树:寻找根节点, 最高层级的id;
2、寻找到根节点ID之后, 用递归的方法实现树状图;
3、将生成的树状图用递归的方法展开成一维有关系的数组(未生成树之前的数据格式)。

let list = [  // 网上随意找的一个有关系的数组变量
    {id: 1, name: '动物', pid: 0},
    {id: 2, name: '鸟类', pid: 5},
    {id: 3, name: '无脊椎动物', pid: 1},
    {id: 4, name: '哺乳动物', pid: 5},
    {id: 5, name: '脊椎动物', pid: 1},
    {id: 6, name: '喜鹊', pid: 2},
    {id: 7, name: '蚯蚓', pid: 3}
  ];

1、寻找根节点

function findPid(list, pid) {
    let obj = list.find(item => item.id === pid);
    return obj ? findPid(list, obj.pid) : pid
  }

2、用递归实现树状结构

function tree(list, pid) {
    let arr = list.filter(item => item.pid === pid);
    if (arr.length === 0) {
      return null
    } else {
      arr.forEach(item => {
        if (tree(list, item.id) !== null) {
          item.children = tree(list, item.id)
        }
      })
    }
    return arr
  }

let resultArr = tree(list, findPid(list, 5));  // 5为list中任意一条数据的pid

3、递归实现遍历树结构

function allList(arr, list1 = []) {
    arr.forEach(item => {
      list1.push(item);
      if (item.children && item.children.length > 0) {
        allList(item.children, list1)
      }
    });
    // 原来的数据里面没有children属性
    list1.forEach(item => delete item.children);
    return list1
  }

  console.log(allList(resultArr))

我自己也是在练习,如果有好的建议,欢迎留言区留言。

相关文章

  • 递归

    递归的概念:当函数自身包含了对自身的调用,那么就是递归 递归的小练习

  • 递归小练习

    实现内容:1、家谱树:寻找根节点, 最高层级的id;2、寻找到根节点ID之后, 用递归的方法实现树状图;3、将生成...

  • 递归练习

    一、汉诺塔 假设所有的盘子都在A柱,需要移动到C柱。输入盘子的数量,输出移动的步骤。 二、放苹果 把m个苹果放到n...

  • Rust语言编程实例100题-028

    Rust语言编程实例100题-028 题目:递归练习。程序调用自身的编程技巧称为递归( recursion)。递归...

  • Rust语言编程实例100题-026

    Rust语言编程实例100题-026 题目:递归练习。程序调用自身的编程技巧称为递归( recursion)。递归...

  • Rust语言编程实例100题-027

    Rust语言编程实例100题-027 题目:递归练习。程序调用自身的编程技巧称为递归( recursion)。递归...

  • 基本题目

    基本练习104111226100101222110递归的终止条件112404

  • 05 -- 递归、预编译

    小练习1:N的阶乘 递归需要注意的两点:1.找规律、2.找出口。没有出口的话递归就会无限死循环,所以必须用一个已知...

  • C语言day05-09递归练习01

    pragma mark 递归练习01 pragma mark 概念 pragma mark 代码

  • 小练习:猴子吃桃问题(递归算法)

    //题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个//第二天早上又将剩下的桃子吃...

网友评论

      本文标题:递归小练习

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