JavaScript实现二叉树所有路径的DFS遍历 | 代码示例与解释

在二叉树中,所有路径指的是从根节点到叶子节点的路径。我们可以使用深度优先搜索(DFS)来遍历二叉树,并记录每条路径。以下是使用JavaScript实现的代码示例:
class TreeNode {
    constructor(val, left = null, right = null) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}
function binaryTreePaths(root) {
    const paths = [];
    function dfs(node, path) {
        if (!node) return;
        // 将当前节点的值加入路径
        path += node.val;
        // 如果是叶子节点,将路径加入结果集
        if (!node.left && !node.right) {
            paths.push(path);
            return;
        }
        // 递归遍历左子树和右子树
        path += '->';
        dfs(node.left, path);
        dfs(node.right, path);
    }
    dfs(root, '');
    return paths;
}
// 示例用法
const root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.right = new TreeNode(5);
console.log(binaryTreePaths(root)); // 输出: ["1->2->5", "1->3"]
代码解释:
- 
TreeNode类:定义了二叉树的节点结构,每个节点包含一个值
val,以及指向左子树和右子树的指针left和right。 - 
binaryTreePaths函数:这是主函数,用于找到二叉树的所有路径。
paths数组用于存储所有路径。dfs函数是一个递归函数,用于深度优先遍历二叉树。- 在 
dfs函数中,我们首先检查当前节点是否为空。如果为空,则返回。 - 然后将当前节点的值加入路径 
path。 - 如果当前节点是叶子节点(即没有左子树和右子树),则将当前路径加入 
paths数组。 - 如果不是叶子节点,则在路径后添加 
->,然后递归遍历左子树和右子树。 
 - 
示例用法:创建了一个简单的二叉树,并调用
binaryTreePaths函数来获取所有路径。 
输出:
对于给定的二叉树:
    1
   / \
  2   3
   \
    5
输出结果为:
["1->2->5", "1->3"]
这个算法的时间复杂度是 O(N),其中 N 是二叉树中的节点数,因为我们需要访问每个节点一次。空间复杂度也是 O(N),主要是递归调用栈的空间消耗。