二叉树路径 - 我的代码有什么问题

Binary Tree Paths - what is wrong with my code

这是二叉树路径问题: 给定一棵二叉树,return 所有根到叶的路径。

例如,给定以下二叉树:

   1
 /   \
2     3
 \
  5

所有根到叶的路径是:

["1->2->5", "1->3"]

这是我的 Javascript 代码:

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {string[]}
 */
var binaryTreePaths = function(root) {
    var paths = [];
    if(!root) return [];
    if(root.left == null && root.right == null){
        if(paths.length == 0) return [""+root.val];
        else return root.val;
    } 
    else{
        if(root.left) paths.push(root.val + "->" + binaryTreePaths(root.left))
        if(root.right) paths.push(root.val + "->" + binaryTreePaths(root.right))
    }

    return paths;
};

测试用例:

输入:

[1,2,3,5,6]

输出:

["1->2->5,2->6","1->3"]

预计:

["1->2->5","1->2->6","1->3"]

为什么我的代码输出不是 return"1->2->6" 的完整路径?

当您进行递归调用时,您的函数将 return 一个数组。您不能只将该数组与前缀字符串连接起来;您需要遍历每个 returned 子路径并构建一个 单独的 路径以推送到数组:

var binaryTreePaths = function(root) {
    var paths = [];
    if(!root) return [];
    if(root.left == null && root.right == null){
        if(paths.length == 0) return [""+root.val];
        else return root.val;
    } 
    else{
        if(root.left) 
          binaryTreePaths(root.left).forEach(function(lp) {
            paths.push(root.val + "->" + lp);
          });
        if(root.right) 
          binaryTreePaths(root.right).forEach(function(rp) {
            paths.push(root.val + "->" + rp);
          });
    }

    return paths;
};