1.分别用广度优先遍历和深度优先遍历展开下面节点

  • 示例
var tree = {name: 'root',children: [{name: 'child1',children: [{name: 'child1_1',children: []}, { name: 'child1_2', children: [] }]}, {name: 'child2',children: [{name: 'child2_1',children: []}]}, {name: 'child3',children: [{name: 'child2_1',children: []}]}]
};
复制代码

广度优先遍历:

function wideTraversal(node) {var nodes = [];if (node != null) {var queue = [];queue.unshift(node);while (queue.length != 0) {var item = queue.shift();nodes.push(item.name);var children = item.children;for (var i = 0; i < children.length; i++) {queue.push(children[i]);}}}return nodes;
}
console.log(wideTraversal(tree))
复制代码

输出结果:

[ 'root','child1','child2','child3','child1_1','child1_2','child2_1','child2_1' ]

深度优先遍历:

function traverseTree(node) {var child = node.children,arr = [];arr.push(node.name);if (child) {child.forEach(function(node) {arr = arr.concat(traverseTree(node));});}return arr;
}
console.log(traverseTree(tree))
复制代码

输出结果:

[ 'root','child1','child1_1','child1_2','child2','child2_1','child3','child2_1' ]

2.关系型数组转换成树形结构对象

类似:

var data = [{ parentId: 0, id: 1, value: '1' },{ parentId: 3, id: 2, value: '2' },{ parentId: 0, id: 3, value: '3' },{ parentId: 1, id: 4, value: '4' },{ parentId: 1, id: 5, value: '5' }
]
复制代码

期望输出:

[
{id:1,value:'1',
children:[{id:4,value:'4',children:[]},
{id:5,value:'5',children:[]}]},
{id:3,value:'3',
children:[id:2,value:'2',children:[]]}]
复制代码

代码:

var getJsonTree = function(data, parentId) {var itemArr = [];for (var i = 0; i < data.length; i++) {var node = data[i];//data.splice(i, 1)if (node.parentId == parentId) {var newNode = { id: node.id, value: node.value, children: getJsonTree(data, node.id) };itemArr.push(newNode);}}return itemArr;
}
console.log(getJsonTree(data, 0))
复制代码

转载于:https://juejin.im/post/5c890e0af265da2de661477b

前端笔试中两道与节点有关的算法题相关推荐

  1. 求杨辉三角的前n行数据_两道简单的套公式算法题:杨辉三角

    杨辉三角应该是大家很早就接触到的一个数学知识,它有很多有趣的性质: 每个数字等于上一行的左右两个数字之和,即 C(n+1,i) = C(n,i) + C(n,i-1) 每行数字左右对称,由 1 开始逐 ...

  2. 装饰器python的通俗理解_2道极好的Python算法题 | 带你透彻理解装饰器的妙用

    今天我分享两道非常好的算法题,大家耐心看完两道算法题之后,注意精华在最后,我相信大家对装饰器的理解又会更上一层楼. 1.斐波那契数列 1).这个序列非常有名,我非常喜欢这个序列(有同学问我为啥,偷偷告 ...

  3. 两个数组合并排序python_python算法题---合并两个有序数组

    leetcode-python-合并两个有序数组 今天第一次电话面试,有点紧张,所以自己感觉表现的不是很好,面试过程中面试官问到了两个算法题,都是leecode上面的题目,而且我都做过,但是当时一下子 ...

  4. 程序员的数学课22 面试中那些坑了无数人的算法题

    前面的课时,我们学习了"代数与统计""算法与数据结构",至今这门课程的主体知识已告一段落,下面我们进入彩蛋环节,我会向你介绍两个应用到数学的场景,第一个是求职面 ...

  5. js date转成 时间字符串_秋招快要开始了,前端笔试中的坑位-JS隐式转换问题

    我们在写笔试题的时候,经常碰到涉及隐式转换的题目,例如 "1" + 2 obj + 1 [] == ![] [null] == false === 和 == === 叫做严格运算符 ...

  6. 两道有点难的回溯利口题996_37

    996. Number of Squareful Arrays 给一个不含负数的整数数组,问有多少种排列组合使数组可开方的.一个数组是可开方的意思是数组中每两个相邻数之和都是可开方的. Input: ...

  7. mopso算法代码程序_JAVA程序员的必杀技,面试中常考的8个经典算法题,过程精妙,代码精炼...

    总有一些题,超越了岁月,即便是经过了新框架的层层迭代,它依然散发着令人回味无穷的味道.下面的几个笔试题目,是JAVA面试中经常遇见的,大家一定要牢记于心,可别复习到了到时候又说不出来.我就吃过这种亏, ...

  8. 30道面试常见的数据结构算法题

    注意: 边界条件的判断 取地址符传参的使用 溢出问题,long long 题目来源:https://github.com/ZXZxin/ZXBlog/blob/master/%E5%88%B7%E9% ...

  9. 美图笔试算法题(两个人拿石头判断输赢)

    刚做完美图的笔试,两道编程题,第一道比较简单:找出一串用逗号隔开的字符串中不重复的那个数. 以下是第二道,时间有限,很多地方没来得及优化,整体逻辑应该没错. question: You are pla ...

  10. 二叉树寻找祖先C语言,微软算法面试题:给定两个二叉树节点,寻找其最近共同祖先...

    给定一颗二叉树,并指定二叉树中任意两个节点,要求找出这两个节点在二叉树中的最近祖先,假定二叉树每个节点都有一个指向其父节点的指针,图中没有画出来,要求算法的空间复杂度必须是O(1), 时间复杂度为O( ...

最新文章

  1. 程序员必知8大排序3大查找(三)
  2. mysqldump 忽略视图_mysqldump的使用--解决不能导出视图的问题
  3. vue-自定义过滤器--时间
  4. redhat7.4启动telnet和SSH服务,修改IP地址
  5. [翻译] Entity Framework Core in Action 关于这本书
  6. python中函数分为哪四类_Python函数参数分类原理详解
  7. Diino - 具有自动数据备份功能的国外2G免费网络硬盘
  8. c语言做简单的水果店程序,怎么开发一款生鲜水果小程序?水果店+小程序该如何组合运营?...
  9. webpack系列-优化
  10. 京瓷1125打印机清零_怎么设置京瓷1125MFP打印机ip地址
  11. 大学英语综合教程四 Unit 7 课文内容英译中 中英翻译
  12. python 开放端口探测工具
  13. python 将一串数字形式的时间转换为标准时间格式
  14. 合并石子(三种方法)
  15. 医疗数据安全 | 健康医疗数据安全服务体系建设思考
  16. 巡逻机器人(Patrol Robot, Uva1600)
  17. 腾云忆想构建云化IT生态,助力我国“双循环经济”数字化升级
  18. python控制程控电源_程控开关稳压电源的控制方式对比
  19. html单元格上下拆分代码,在HTML / CSS中如何垂直拆分表格单元格(特殊版本)
  20. 硬货-如何用风控拯救下架的小红书

热门文章

  1. 【幅度调制】基于matlab GUI语音幅度调制【含Matlab源码 292期】
  2. icons在java显示出来_java – 制作jfilechooser显示图像缩略图
  3. mysql 修改字段为主键自增_「MySQL整理」 MySQL语法,如何操作数据表
  4. python3小程序代码_我想使用python写一个小程序作为练习,使用的是python3。
  5. html position属性作用,position(五种属性,以及每个属性的特点)
  6. 选择mysql开发的原因_MySQL开发技巧
  7. 怎么判断前轮左右的位置_老司机教你如何用方向盘,判断左右车轮位置,新手司机一看就会!...
  8. 编辑请求内容 Charles
  9. 【编译打包】nginx-1.4.7-1.el6.lite.src.rpm
  10. 聊天机器人5步重塑酒店业