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

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.hqwc.cn/news/228803.html

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

相关文章

物理层之码分复用(内含相关例题)

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

智能井盖传感器怎么监测井盖倾斜?

城市道路上的井盖是常见的安全隐患&#xff0c;由于井盖质量不过关、安装不合理等原因导致的井盖位移或倾斜等事故&#xff0c;每年都处于不断增加的状态。为了减少此类案件的发生并维护社会治安&#xff0c;国家相关部门已经制定了多项政策法规对井盖进行统一监管。鼓励各个城…

这款高性能分布式ID生成器,现在是你的了~

这是DDD&微服务系列的第17篇&#xff0c;欢迎持续关注~ 概述 在软件开发过程中&#xff0c;我们经常会遇到需要生成全局唯一流水号的场景&#xff0c;例如各种流水号和分库分表的分布式主键ID。特别是在使用MySQL数据库时&#xff0c;除了要求流水号具有“全局唯一”性外&…

第二十章 多线程总结

继承Thread 类 Thread 类时 java.lang 包中的一个类&#xff0c;从类中实例化的对象代表线程&#xff0c;程序员启动一个新线程需要建立 Thread 实例。 Thread 对象需要一个任务来执行&#xff0c;任务是指线程在启动时执行的工作&#xff0c;start() 方法启动线程&…

Vue3 Teleport

假设情景 以下面截图为例&#xff0c;A组件中可以操控数字的加减&#xff0c;想把这个功能放到B组件中使用&#xff0c;AB两个组件非父子组件&#xff0c;甚至可能被嵌套了其他组件&#xff0c;一般办法可能是将A组件数据传给AB组件的父组件&#xff0c;然后在相办法给B&#…

将二维数组ndarray转置ndarray.T

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将二维数组ndarray转置 ndarray.T 选择题 执行以下代码transposed_arr的输出结果为&#xff1f; import numpy as np arr np.array([[1, 2, 3], [4, 5, 6]]) transposed_arr arr.T print(&q…

MySQL索引优化实战一

#插入一些示例数据drop procedure if exists insert_emp;delimiter ;;create procedure insert_emp()begindeclare i int;set i1;while(i<100000)doinsert into employees(name,age,position) values(CONCAT(tqq,i),i,dev);set ii1;end while;end;;delimiter ;call insert_e…

数据扩增(Data Augmentation)、正则化(Regularization)和早停止(Early Stopping)

数据扩增&#xff08;Data Augmentation&#xff09;、正则化&#xff08;Regularization&#xff09;和早停止&#xff08;Early Stopping&#xff09;是深度学习中常用的三种技术&#xff0c;它们有助于提高模型的泛化性能和防止过拟合 数据扩增&#xff08;Data Augmentati…

使用Wordpress 从0-1 制作一个博客网站

一. 做网站准备 购买域名 域名使用的是二级域名&#xff1a;blog.zmrw.net&#xff08;在浏览器可以提前预览网站制作后效果&#xff09; 购买服务器 服务器使用A2 Hosting 购买Wordpress 主题 主题使用的是 Porto 主题 二. 开始建站 1. 将域名添加至 Cloudflare 2. 将…

智能优化算法应用:基于混合蛙跳算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于混合蛙跳算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于混合蛙跳算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.混合蛙跳算法4.实验参数设定5.算法结果6.参考…

Kubernetes Pod 介绍

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容Pod 介绍与原理讲解Pod 生命周期管理Pod 的健康检查 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51…

记录Windows下安装redis的过程

开源博客项目Blog支持使用EasyCaching组件操作redis等缓存数据库&#xff0c;在继续学习开源博客项目Blog之前&#xff0c;准备先学习redis和EasyCaching组件的基本用法&#xff0c;本文记录在Windows下安装redis的过程。   虽然redis官网文档写着支持Linux、macOS、Windows等…