二叉树路径 - 我的代码有什么问题
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;
};
这是二叉树路径问题: 给定一棵二叉树,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;
};