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)
  • 相关阅读:
    客户端登录状态下打开对应网站也处于登陆状态
    C#替换HTML标签
    常用地址
    实时检测网络状态及是否可以连接Internet
    linux iconv 批量转码
    Linux PCI网卡驱动分析
    Cache写机制:Writethrough与Writeback
    addr2line 动态库
    PCI总线原理(二)
    Co.,Ltd.
  • 原文地址:https://www.cnblogs.com/marvey/p/10733279.html
Copyright © 2011-2022 走看看