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上的所有节点 代码如下: /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * ...
随机推荐
- 低价购买 dp
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- luoguP4921 情侣?给我烧了!
luogu 考虑对于\(n\)对情侣,恰好\(k\)对是和谐的方案数是 \[ ans[n][k]=\binom{n}{k}A^k_n2^kg(n-k) \] \(g(n)\)为全部\(n\)对情侣不和 ...
- CentOS编译安装GCC 4.9.2成功
在Linux上编译安装gcc是个寻烦恼的活,对于像我这样习惯于在Windows上面使用二进制安装包的人来说,自已编译安装gcc是个相当大的挑战,今天直接挑战最新版的gcc,是4.9.2版本的,做之前查 ...
- Shell面试,笔试整理
1.经典Shell脚本面试问题:https://blog.csdn.net/hyszyl/article/details/60970307
- ie 9 position:fixed 无效的两种情况
第一种情况: 运行发现在Google Chrome,FireFox都可以的,但是在IE9就不行了很是郁闷,因为IE6以上的版本都是支持fixed的属性的:上网上找了好久没找到,因为不知道关键字该怎么搜 ...
- 积分图像的应用(二):非局部均值去噪(NL-means)
非局部均值去噪(NL-means)一文介绍了NL-means基本算法,同时指出了该算法效率低的问题,本文将使用积分图像技术对该算法进行加速. 假设图像共像个素点,搜索窗口大小,领域窗口大小, 计算两个 ...
- DB restore point and datagurad
######## 12.5.1 Flashing Back a Physical Standby Database to a Specific Point-in-Time The following ...
- Python Class __init__ __del__ 构造,析构过程解析【转】
转载自: http://blog.csdn.net/bbdxf/article/details/25774763 最近学习<Python参考手册>即<Learning Python& ...
- VMWare复制虚拟机系统后,模块“Disk”无法启动【转】
1.找到虚拟机所在的目录 将 .vmx文件打开 将文件vmci0.present = "TRUE" 改为 vmci0.present = "FALSE" 2.删 ...
- 【Linux】Linux常用命令大全
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...