无法理解二叉树DFS的递归部分

时间:2020-04-21 20:24:07

标签: javascript algorithm recursion binary-tree nodes

我已经通过反复试验编写了此函数,但我似乎无法理解递归部分如何在两个路径中添加第一个元素,或者在这种情况下是1->。这是代码:

class TreeNode {
    constructor(val) {
        this.val = val;
        this.left = this.right = null;
    }
}

const binaryTreePaths = root => {
    if (!root) return null
    let results = []
    const dfs = (node, path) => {
        if (!node.left && !node.right) return results.push(path + node.val)
        if (node.left) dfs(node.left, path + node.val + '->')
        if (node.right) dfs(node.right, path + node.val + '->')
    }
    dfs(root, '')
    return results
}

const tree1 = new TreeNode(1)
tree1.left = new TreeNode(2)
tree1.right = new TreeNode(3)
tree1.left.right = new TreeNode(5)

console.log(binaryTreePaths(tree1))

对左节点和右节点的递归调用将左孩子和右孩子添加到我理解的路径中,但是函数中的第一个节点又添加了什么?

1 个答案:

答案 0 :(得分:1)

可能需要一些重构功能:

const dfs = (node, parentPath) => {
    const path = parentPath + node.val;
//                          ^^^^^^^^^^ magic happens here
    if (!node.left && !node.right) return results.push(path)
    if (node.left) dfs(node.left, path + '->')
    if (node.right) dfs(node.right, path + '->')
}

尝试通过调试器逐步解决此问题,并记录parentPathpath的值。