js-树的遍历

数据

var tree = [
    {
        name: "A",
        children: [
            {
                name: "B",
                children: [
                    {
                        name: "E"
                    },
                    {
                        name: "F"
                    }
                ]
            },
            {
                name: "C",
                children: [
                    {
                        name: "G"
                    },
                    {
                        name: "H"
                    }
                ]
            },
            {
                name: "D",
                children: [
                    {
                        name: "I"
                    },
                    {
                        name: "J"
                    }
                ]
            }
        ]
    }
]

广度优先遍历

var list = []
function wideSearch(tree) {
    let nodes = []
    nodes = nodes.concat(tree)
    var shift = nodes.shift()
    list.push(shift)
    if (shift.children) {
        nodes = nodes.concat(shift.children)
    }
    if (nodes.length > 0) {
        wideSearch(nodes)
    }
    return nodes
}

深度优先遍历

var list = []
function deepSearch(tree) {
    for (var i = 0; i < tree.length; i++) {
        list.push(tree[i].name)
        if (tree[i].children) {
            deepSearch(tree[i].children)
        }
    }
}

深度优先不递归

function deepSearchStack(tree) {
    var stack = []
    var result = []
    stack = stack.concat(tree)
    while (stack.length > 0) {
        var node = stack.pop()
        result.push(node.name)
        if (node.children) {
            stack = stack.concat(node.children.reverse())
        }
    }
    console.log(result)
}

deepSearchStack(tree)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容