遍历树,并且记录叶子节点到父级的路径

==

const tree = {
        name: 'leve1',
        children: [
          { name: 'leaf12' },
          {
            name: 'lvev13',
            children: [
              { name: 'leaf131' },
              {
                name: 'leaf132',
                children: [{ name: 'leaf1323' }, { name: 'leaf1324' }]
              }
            ]
          }
        ]
      };

      const treeFn = (tree, path = '/', record = []) => {
        if (!tree.children || tree.children.length === 0) {
          record.push({
            name: path + '/' + tree.name
          });
        } else {
          for (const item of tree.children) {
            treeFn(item, path + tree.name + '/', record);
          }
        }

        return record;
      };

结果 

思路:递归需要一个变量记录路径,和数据

 先确认递出条件,没有children 说明是叶子节点,用path 拼接 push数组

 循环这个数组,递归每一项,并用path 记录当前的 tree.name

      

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
目的: 掌握与文件和目录有关的系统调用和库函数。 要求: 1、编写程序myfind 命令语法: myfind <pathname> [-comp <filename> | -name <str>…] 命令语义: (1)myfind <pathname> 的功能: 除了具有与程序4-7相同的功能外,还要输出在<pathname>目录子之下,文件长度不大于4096字节的常规文件,在所有允许访问的普通文件中所占的百分比。程序不允许打印出任何路径名。 (2)myfind <pathname> -comp <filename>的功能: <filename>是常规文件的路径名(非目录名,但是其路径可以包含目录)。命令仅仅输出在<pathname>目录子之下,所有与<filename>文件内容一致的文件的绝对路径名。不允许输出任何其它的路径名,包括不可访问的路径名。 (3)myfind <pathname> -name <str>…的功能: <str>…是一个以空格分隔的文件名序列(不带路径)。命令输出在<pathname>目录子之下,所有与<str>…序列中文件名相同的文件的绝对路径名。不允许输出不可访问的或无关的路径名。 <pathname>和<filename>均既可以是绝对路径名,也可以是相对路径名。<pathname>既可以是目录,也可以是文件,此时,目录为当前工作目录。 2、注意尽可能地提高程序的效率。注意避免因打开太多文件而产生的错误。 3、遍历目录时,访问结点(目录项)的具体操作应当由遍历函数dopath携带的函数指针参数决定。这样程序的结构清晰,可扩充性好。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值