zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    Spring+Spring MVC+Hibernate框架搭建实例
    数据结构:串
    为什么java中用枚举实现单例模式会更好
    验证码原理分析及实现
    Servlet监听器——实现在线登录人数统计小例子
    IntelliJ IDEA 远程调试 Tomcat 的方法
    SQL注入的一些技巧分享
    Java中String与byte[]的转换
    JavaSE基础:集合类
    二叉树的非递归遍历
  • 原文地址:https://www.cnblogs.com/marvey/p/10733279.html
Copyright © 2011-2022 走看看