js数据结构处理--------树结构数据遍历
1、深度遍历
深度遍历利用栈来实现
class Stack {
constructor () {
this.top = 0, // 栈的长度
this.list = []
}
push(item) {
this.top++;
this.list.push(item) // 入栈操作
}
pop () {
--this.top;
return this.list.pop() // 出栈操作
}
peek () {
return this.list[this.top -1] // 查询栈顶元素
}
}
let treeData = {
id: 0,
name: '00',
children: [
{
id: 1,
name: '01',
children: [
{
id: 11,
name: '11',
children: []
}]
},
{
id: 2,
name: '02',
children: [
{
id: 22,
name: '22',
children: []
}]
}]
}
function formatTreeData(data) {
let stack = new Stack()
stack.push(data);
while(stack.top) {
let item = stack.pop()
for (let i in item.children) {
stack.push(item.children[i])
}
console.log(item.id)
}
}
formatTreeData(treeData)
2、广度遍历
广度遍历利用队列来实现
class Queue {
constructor () {
this.top = 0, // 栈的长度
this.list = []
}
push(item) {
this.top++;
this.list.push(item) // 入栈操作
}
shift() {
--this.top;
return this.list.shift() // 出栈操作
}
peek () {
return this.list[this.top -1] // 查询栈顶元素
}
}
let treeData = {
id: 0,
name: '00',
children: [
{
id: 1,
name: '01',
children: [
{
id: 11,
name: '11',
children: []
}]
},
{
id: 2,
name: '02',
children: [
{
id: 22,
name: '22',
children: []
}]
}]
}
function formatTreeData(data) {
let queue = new Queue()
queue.push(data);
while(queue.top) {
let item = queue.shift()
for (let i in item.children) {
queue.push(item.children[i])
}
console.log(item.id)
}
}
formatTreeData(treeData)
js数据结构处理--------树结构数据遍历的更多相关文章
- js 树结构数据遍历条件判断
代码: /** * 树结构数据条件过滤 * js 指定删除数组(树结构数据) */ function filter (data, id) { var newData = data.filter(x = ...
- js数据结构处理--------扁平化数组处理为树结构数据
将扁平化的数组处理为树结构数据,我们可以利用对象来处理,对象的复制是浅拷贝,指向相同的内存地址: var arr = [ { id: 0, pid: -1, name: 'sadas' }, { id ...
- js 递归树结构数据查找父级
1.json树数据查找所有父级--完成 json:树结构数据 var arrData = [{ "label": "中国", "City": ...
- Vue.js与angular在数据实现的思考
Vue.js,其简洁的API以及活跃的社区,对于打算从angular转向Vue还是挺友好的,打算最近一段时间去整理下Vue自己的一些思考,加深下对于此的印象. Vue与Angular同属于MVVM框架 ...
- AngularJS集合数据遍历显示
AngularJS集合数据遍历显示 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
- legend2---开发日志6(后端和前端如何相互配合(比如php,js,元素状态和数据改变))
legend2---开发日志6(后端和前端如何相互配合(比如php,js,元素状态和数据改变)) 一.总结 一句话总结:php给元素初始状态,js根据这个状态做初始化和后续变化,使用vue真的很方便( ...
- javascript数据结构与算法--二叉树遍历(后序)
javascript数据结构与算法--二叉树遍历(后序) 后序遍历先访问叶子节点,从左子树到右子树,再到根节点. /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ ...
- javascript数据结构与算法--二叉树遍历(先序)
javascript数据结构与算法--二叉树遍历(先序) 先序遍历先访问根节点, 然后以同样方式访问左子树和右子树 代码如下: /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * ...
- javascript数据结构与算法--二叉树遍历(中序)
javascript数据结构与算法--二叉树遍历(中序) 中序遍历按照节点上的键值,以升序访问BST上的所有节点 代码如下: /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * ...
随机推荐
- jmeter - 函数:Random 随机函数的使用
场景:在做接口测试时,比如说要求用户的手机号码不允许重复,那此时可以通过Random 随机函数来解决此问题: 1.在JMeter 工具中,选择{选项-函数助手对话框-} 函数助手中选择 Random ...
- K8S上的ELK和应用日志上报实战
来源:DevOps ID:Idevops168 本次实战的基础结构如下图所示: 一共有两个Pod:ELK和web应用: ELK的Pod会暴露两个服务,一个暴露logstash的5044端口,给file ...
- HDU1425 A Chess Game
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1524 思路:题目就是给你一个拓扑图,然后指定点的位置放棋子,然后两人轮流移动棋子(题目中的边的关系),直到 ...
- HDU2047 阿牛的EOF牛肉串
题目:https://blog.csdn.net/qq_40932661?t=1 表面上看去似乎无从下手.但是可以从前面地推出后面的 递推: 假如涂第N个位置,有两种可能,①涂O ②不涂O. 如果涂O ...
- 洛谷P4113 [HEOI2012]采花
题目描述 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花. 花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于 ...
- linux限制内存和磁盘使用
一.如何限制用户的磁盘空间 1. 查看系统中所有用户的磁盘空间配额 sudo repquota /dev/vda1 2. 查看某个用户的磁盘空间配额 sudo edquota user_name 要想 ...
- keil编译器
1 数组比指针效率高. 2 v4.73不能查看局部变量的值:可先将C/C++选项下的优化级别设置成O0,查看完之后修改回去.因默认级别是2级.
- jquery选中checkbox
jquery选中checkbox: $(function(){ $("[value = bb]:checkbox").attr("checked", true) ...
- android 开发-数据存储之共享参数
android提供5中数据存储方式 数据存储之共享参数 内部存储 扩展存储 数据库存储 网络存储 而共享存储提供一种可以让用户存储保存一些持久化键值对在文件中,以供其他应用对这些共享参数进行调用.共 ...
- python复数
复数的概念在很久以前,数学家们被下面的等式困扰.x2=-1这是因为任何实数(无论正负)乘以自己总会得到一个非负数.一个数怎么可以乘以自己得到一负数?没有这样的实数存在.就这样18世纪,数学家们发了一个 ...