算法面试题--树与对象数组的转化

1. Array -> Tree

var arr = [{ id: 12, parentId: 1, name: "朝阳区" },{ id: 241, parentId: 24, name: "田林街道" },{ id: 31, parentId: 3, name: "广州市" },{ id: 13, parentId: 1, name: "昌平区" },{ id: 2421, parentId: 242, name: "上海科技绿洲" },{ id: 21, parentId: 2, name: "静安区" },{ id: 242, parentId: 24, name: "漕河泾街道" },{ id: 22, parentId: 2, name: "黄浦区" },{ id: 11, parentId: 1, name: "顺义区" },{ id: 2, parentId: 0, name: "上海市" },{ id: 24, parentId: 2, name: "徐汇区" },{ id: 1, parentId: 0, name: "北京市" },{ id: 2422, parentId: 242, name: "漕河泾开发区" },{ id: 32, parentId: 3, name: "深圳市" },{ id: 33, parentId: 3, name: "东莞市" },{ id: 3, parentId: 0, name: "广东省" },
];function arrayToTreeV3(arr, root) {return arr.filter((item) => item.parentId === root).map((item) => ({ ...item, children: arrayToTreeV3(arr, item.id) }));
}
let test = arrayToTreeV3(arr, 0);

2. Tree -> Array

const treeData = [{id: 2,title: "中国",parent_id: 0,children: [{id: 3,title: "广东省",parent_id: 2,children: [{id: 4,title: "广州市",parent_id: 3,children: [{ id: 5, title: "天河区", parent_id: 4 }],},],},{ id: 6, title: "湖南省", parent_id: 2 },],},{ id: 1, title: "俄罗斯", parent_id: 0 },
];function treeToList(data) {let res = [];const dfs = (tree) => {tree.forEach((item) => {if (item.children) {dfs(item.children);delete item.children;}res.push(item);});};dfs(data);return res;
}
let testarr = treeToList(treeData);

3.Tree 查找路径(id)

function parseTreePath(tree, id, path = "") {for (let i = 0; i < tree.length; i++) {let tempPath = path;// 避免出现在最前面的/tempPath = `${tempPath ? tempPath + "/ " : tempPath}${tree[i].title}`;if (tree[i].id == id) return tempPath;else if (tree[i].children) {let reuslt = parseTreePath(tree[i].children, id, tempPath);if (reuslt) return reuslt;}}
}
console.log(parseTreePath(treeData, 5));

4. 树的深度优先遍历

思想:访问该元素后,如果该元素存在子元素,则访问该元素的第一个子元素,如果不存在,则访问该元素的兄弟节点(即退出该函数,返回上一层函数,访问上一层中未被访问的子元素),重复此操作。

//         a
//    b         c
//c d e f    g h iconst dfs = root => {if(!root) return;console.log(root.val);root.children.forEach(child => {dfs(child)})
}dfs( treeData)
// a b d e f c g h i

5. 广度优先遍历

思想:访问该元素后,如果该元素存在兄弟节点,则依次访问该元素的兄弟节点,如果不存在,则访问该元素的孩子节点

//         a
//    b         c
//c d e f    g h iconst bfs = root => {if(!root) return;const queue = [root];while(queue.length) {const top = queue.shift();console.log(top.val);top.children.forEach(child => {queue.push(child)})}
}bfs( treeData)
// a b c d e f g h i

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/184640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

曲面拼接oled屏幕为何受到企业展览青睐

曲面拼接OLED屏幕受到企业展览青睐的原因主要有以下几点&#xff1a; 创新的技术&#xff1a;曲面拼接OLED屏幕采用先进的OLED技术&#xff0c;具有自发光原理&#xff0c;可以实现真正的黑色和高对比度&#xff0c;呈现出生动的图像。其每个像素都能独立发光&#xff0c;没有背…

Windows系统下使用PHPCS+PHPMD+GIT钩子

前言 使用PHPCSGIT钩子保障团队开发中代码风格一致性实践 使用PHPMD提高代码质量与可读性 0.介绍 PHP_CodeSniffer php代码嗅探器 包含phpcs(php code standard 代码标准) phpcbf(php code beautify fix 代码美化修复) 是一个代码风格检测工具,着重代码规范 它包含两类脚本…

有时出厂重置BIOS是解决电脑问题和保持其最佳性能的好办法,主要有两种方法

​BIOS是计算机开机时启动的第一个程序&#xff0c;它有助于执行一些基本的计算机操作&#xff0c;并管理计算机和安装在计算机上的操作系统之间的命令。与任何其他程序一样&#xff0c;如果在启动计算机时遇到问题或在计算机中添加了新硬件&#xff0c;则可能需要将BIOS重置为…

「幻醒蓝」可视化主题套件|融合天空的清澈与海洋的深邃

现如今&#xff0c;数据可视化已成为信息传递的重要手段之一。在这样一个信息爆炸的时代&#xff0c;向人们传达正确的信息显得尤为重要。为此&#xff0c;可视化主题套件应运而生&#xff0c;提供了一种多样化的、可视化的方式来展示数据。不同的主题套件能够适应不同的信息传…

免费的电脑AI写作工具-5款好用的智能AI写作软件

随着人工智能&#xff08;AI&#xff09;技术的不断进步&#xff0c;电脑AI写作已经成为现代写作领域的一项不可或缺的工具。通过深度学习和自然语言处理的融合&#xff0c;AI写作软件得以模拟人类的创造性和表达能力&#xff0c;为我们提供了快速、高效地生成优质文字内容的可…

15.spring源码解析-invokeBeanFactoryPostProcessors

BeanFactoryPostProcessor接口允许我们在bean正是初始化之前改变其值。此接口只有一个方法: void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory);有两种方式可以向Spring添加此对象: 通过代码的方式: context.addBeanFactoryPostProcessor 通过xml…

springboot+netty化身Udp服务端,go化身客户端模拟设备实现指令联动

&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 springbootnetty化身Udp服务端&#xff0c;go化身客户端模拟设备实现指令联动 &#x1f517;涉及链接前言异步通信的优势异步通信的优势&#xff1a;异步通信的应用场景&…

电子学会 2023年9月 青少年软件编程Python编程等级考试二级真题解析(选择题+判断题+编程题)

青少年编程Python编程等级考试二级真题解析(选择题+判断题+编程题) 2023年9月 一、选择题(共25题,共50分) 以下代码运行结果是?( ) A. 宸宸 B. 杭杭 C. 玉玉 D. 州州 答案选:A 考点分析:考察python 列表操作 jxw=yyh[2][0],jxw的值是“拱宸桥”,jxw[1]的值是“宸”…

Java实现飞翔的鸟小游戏

Java实现飞翔的鸟小游戏 1.准备工作 创建一个新的Java项目命名为“飞翔的鸟”&#xff0c;并在src中创建一个包命名为“com.qiku.bird"&#xff0c;在这个包内分别创建4个类命名为**“Bird”、“BirdGame”、“Column”、“Ground”&#xff0c;并向需要的图片**素材导入…

PSP - 解决 ESMFold 推理长序列蛋白质结构的显存溢出问题

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/134709211 使用 ESMFold 推理长序列 (Seq. Len. > 1500) 时&#xff0c;导致显存不足&#xff0c;需要设置 chunk_size 参数&#xff0c;实现长…

同旺科技 分布式数字温度传感器 -- OPC Servers测试

内附链接 1、数字温度传感器 主要特性有&#xff1a; ● 支持PT100 / PT1000 两种铂电阻&#xff1b; ● 支持 2线 / 3线 / 4线 制接线方式&#xff1b; ● 支持5V&#xff5e;17V DC电源供电&#xff1b; ● 支持电源反接保护&#xff1b; ● 支持通讯波特率1200bps、2…

谁可以从使用 Amazon Lightsail 进行 VPS 托管中受益?

文章作者&#xff1a;Libai 介绍 在当今数字化的环境中&#xff0c;拥有可靠和高效的托管解决方案对于企业和个人来说至关重要。由于其灵活性、可扩展性和成本效益&#xff0c;虚拟专用服务器&#xff08;VPS&#xff09;托管已经在市场上获得了巨大的流行。Amazon Lightsail …

最新Midjourney绘画提示词Prompt

最新Midjourney绘画提示词Prompt 一、AI绘画工具 SparkAi【无需魔法使用】&#xff1a; SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01;本系统使用NestjsVueTypescript框架技术&am…

自己的邮箱名称出现在别人的此电脑的网络位置中

在公司别的同事告诉我&#xff0c;我的邮箱名字出现在他们的【此电脑】-【网络位置中】 如图&#xff1a; 当时吓我一跳&#xff0c;因为我总喜欢搞一些渗透的东西&#xff0c;我以为把自己暴漏了&#xff0c;然后疯狂的在网上找原因。 于是就搜到一位安暖的博主&#xff1a; …

字符串函数-C语言

介绍 字符串函数&#xff0c;简单说&#xff0c;就是处理字符串的函数&#xff0c;头文件是string.h&#xff0c;以下是今天的讲解中会讲到的一系列字符串函数 头文件&#xff1a;#include<string.h>strlen&#xff1a;求字符串长度strcpy&#xff1a;拷贝字符串strcat&…

使用自动化测试获取手机短信验证码

目前在职测试开发,,写一些脚本,个人认为这职业不科学不应该有的职业,测试就是测试,开发就是开发,运维还是老鸟,这行业总能折腾些莫名其妙的东西出来,刚做这行时学的第一门语言是bash shell, 去新去单位上班直接写了个一键搭建测试环境的测试脚本,本来不想干测试了,好好做微信小…

夜莺项目发布 v6.4.0 版本,新增全局宏变量功能

大家好&#xff0c;夜莺项目发布 v6.4.0 版本&#xff0c;新增全局宏变量功能&#xff0c;本文为大家简要介绍一下相关更新内容。 全局宏变量功能 像 SMTP 的配置中密码类型的信息&#xff0c;之前都是以明文的方式在页面展示&#xff0c;夜莺支持全局宏变量之后&#xff0c;可…

kibana安装

kibana安装下载注意事项 地址&#xff1a;curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.16.3-linux-x86_64.tar.gz 下载后直接解压启动即可 1. 但需要使用非root用户启动 &#xff0c;root用户启动会报错 2. kibana需要和elasticsearch版本一致 不然…

vue3通过el-dropdown实现动态菜单切换页面

这是效果图 首先是主页index.vue <template><el-row><el-col :span"20"><!-- 顶部菜单 --><div v-if"showTop"><topmenu /></div><!-- 右侧下方区域动态切换的内容 --><div style"flex: 1;&quo…

css浮动属性学习

在此文&#xff0c; html菜单的基本制作-CSDN博客 已经看到css 浮动属性的效果&#xff1b;下面单独看一下浮动属性&#xff1b; 做4个div&#xff0c;设置不同的背景色&#xff0c;不为div添加float属性&#xff1b;效果如下&#xff1b; 因为div是块级元素&#xff0c;默认…