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上的所有节点 代码如下: /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * ...
随机推荐
- Mysql-5.7.14使用常见问题汇总
常见问题汇总: 一. 当我们用navicate premiun 连接远程数据库时,若出现如下问题:
- Python中print()函数不换行的方法
一.让print()函数不换行 在Python中,print()函数默认是换行的.但是,在很多情况下,我们需要不换行的输出(比如在算法竞赛中).那么,在Python中如何做到这一点呢? 其实很简单.只 ...
- Java Script 第一章.
什么是Java script? JavaScript是一种基于对象的脚本语言,用于开发基于客户端和基于服务器的Internet应用程序 JavaScript是一种脚本语言(脚本语言是一种轻量级的编程语 ...
- mysql update select 从查询结果中更新数据
UPDATE user_online_month_atu a INNER JOIN ( SELECT user_id, sum(c.online_times) as online_times, SUM ...
- POJ1048 Follow My Logic
题目来源:http://poj.org/problem?id=1048 题目大意: 给定一个逻辑电路,求其逻辑输出.电路含一个或多个输入,以及一些双输入的与门/或门组成.电路图以下面形式的ASCII码 ...
- webpack配置Jquery全局包及全局包插件
一:在配置文件配置: plugins: [ //将来以template为模版,生成一个index.html并且发布到webpack-dev-server开启的node服务器上面去 new HtmlWe ...
- 我在B站学习 清华大学教授带你学习c++(进阶)构造函数
B站av11459203的一系列视频,跳过了基础篇直接进入进阶,从此难度开始加大.这里做出一些笔记分享一下. 我是1.25速度看的..对应分P 37-38 构造函数的作用 将对象初始化为一个特定的初始 ...
- Uva12174
#include <bits/stdc++.h> using namespace std; ; int t; int s,n; ]; ]; ]; void init(){ memset(a ...
- C++之struct
C++的struct对C做和很多补充,里面可以放函数(构造函数和虚函数),也可以同struct和class的继承,在C++中也完全可以替代class.他们之间的主要区别: 1 calss默认是私有继承 ...
- /sbin/int的启动及后续进程的启动_3
转载自: http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 半年前,我写了<计算机是如何启动的?>,探讨BIOS ...