[英]Binary Tree Paths - what is wrong with my code
这是二叉树路径问题:给定二叉树,返回所有根到叶路径。
例如,给定以下二叉树:
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”的完整路径?
进行递归调用时,函数将返回一个数组。 你不能只用前缀字符串推送该数组的串联; 您需要遍历每个返回的子路径并构建一个单独的路径来推送到数组:
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;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.