Skip to content

Instantly share code, notes, and snippets.

@NazarkinRoman
Created February 25, 2020 14:36
Show Gist options
  • Save NazarkinRoman/55a719a12c98c5ff48dd39ffc359a353 to your computer and use it in GitHub Desktop.
Save NazarkinRoman/55a719a12c98c5ff48dd39ffc359a353 to your computer and use it in GitHub Desktop.
tree traversal implementations

Обход в глубину с рекурсией

function dfsWalkRecursive(node) {
  console.log(node.value)
  if(node.children) node.children.forEach(childNode => dfsWalkRecursive(childNode))
}


const tree = {
    value: 1,
    children: [
        {
            value: 2,
            children: [
                {
                    value: 3,
                    children: [{ value: 4 }, { value: 5 }, { value: 6 }]
                },
                {
                    value: 7
                }
            ]
        }
    ]
}

dfsWalkRecursive(tree)

Обход в глубину без рекурсии

function dfsWalk(tree) {
    const queue = [tree]

    while (queue.length) {
        const node = queue.pop()
        console.log(node.value)
        if (node.children) queue.push(...node.children.reverse())
    }
}

const tree = {
    value: 1,
    children: [
        {
            value: 2,
            children: [
                {
                    value: 3,
                    children: [{ value: 4 }, { value: 5 }, { value: 6 }]
                },
                {
                    value: 7
                }
            ]
        }
    ]
}

dfsWalk(tree)

Обход в ширину без рекурсии

function bfsWalk(tree) {
    const queue = [tree]

    while (queue.length) {
        const node = queue.shift()
        console.log(node.value)
        if (node.children) queue.push(...node.children)
    }
}

const tree = {
    value: 1,
    children: [
        {
            value: 2,
            children: [
                {
                    value: 3,
                    children: [{ value: 5 }, { value: 6 }, { value: 7 }]
                },
                {
                    value: 4
                }
            ]
        }
    ]
}

bfsWalk(tree)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment