【问题标题】:Binary Tree Paths - what is wrong with my code二叉树路径 - 我的代码有什么问题
【发布时间】:2016-06-07 02:06:13
【问题描述】:

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

例如,给定以下二叉树:

   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"]

为什么我的代码输出没有返回 "1->2->6" 的完整路径?

【问题讨论】:

  • 您的代码似乎期望树看起来像具有.left.right 属性的对象,但您说输入是一个简单的数组。

标签: javascript tree


【解决方案1】:

当您进行递归调用时,您的函数将返回一个数组。您不能只用前缀字符串推送该数组的串联;您需要遍历每个返回的子路径并构建一个 separate 路径以推送到数组:

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;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多