Javascript 如何遍历两个相同的树并返回目标值?
有人能告诉我为什么console.log输出正确的答案,但是返回值为null吗 我尝试遍历两个相同的树,然后当在原始树的节点中找到目标值时,我尝试在克隆树中返回相同的节点值 我真的很感激你能提供的任何帮助 原始问题: 代码库:Javascript 如何遍历两个相同的树并返回目标值?,javascript,binary-search-tree,Javascript,Binary Search Tree,有人能告诉我为什么console.log输出正确的答案,但是返回值为null吗 我尝试遍历两个相同的树,然后当在原始树的节点中找到目标值时,我尝试在克隆树中返回相同的节点值 我真的很感激你能提供的任何帮助 原始问题: 代码库: var getTargetCopy = function(original, cloned, target) { if(original === null) { return null } original.left =
var getTargetCopy = function(original, cloned, target) {
if(original === null) {
return null
}
original.left = getTargetCopy(original.left, cloned.left, target)
original.right = getTargetCopy(original.right, cloned.right, target)
if(original.val === target.val) {
console.log(cloned.val)
return cloned.val
}
};
Your input:
original = [7,4,3,null,null,6,19]
cloned = [7,4,3,null,null,6,19]
target.val = 3
stdout:
3
Output:
null
Expected:
3
输入:
var getTargetCopy = function(original, cloned, target) {
if(original === null) {
return null
}
original.left = getTargetCopy(original.left, cloned.left, target)
original.right = getTargetCopy(original.right, cloned.right, target)
if(original.val === target.val) {
console.log(cloned.val)
return cloned.val
}
};
Your input:
original = [7,4,3,null,null,6,19]
cloned = [7,4,3,null,null,6,19]
target.val = 3
stdout:
3
Output:
null
Expected:
3
控制台。日志:
var getTargetCopy = function(original, cloned, target) {
if(original === null) {
return null
}
original.left = getTargetCopy(original.left, cloned.left, target)
original.right = getTargetCopy(original.right, cloned.right, target)
if(original.val === target.val) {
console.log(cloned.val)
return cloned.val
}
};
Your input:
original = [7,4,3,null,null,6,19]
cloned = [7,4,3,null,null,6,19]
target.val = 3
stdout:
3
Output:
null
Expected:
3
输出:
var getTargetCopy = function(original, cloned, target) {
if(original === null) {
return null
}
original.left = getTargetCopy(original.left, cloned.left, target)
original.right = getTargetCopy(original.right, cloned.right, target)
if(original.val === target.val) {
console.log(cloned.val)
return cloned.val
}
};
Your input:
original = [7,4,3,null,null,6,19]
cloned = [7,4,3,null,null,6,19]
target.val = 3
stdout:
3
Output:
null
Expected:
3
所需答案:
var getTargetCopy = function(original, cloned, target) {
if(original === null) {
return null
}
original.left = getTargetCopy(original.left, cloned.left, target)
original.right = getTargetCopy(original.right, cloned.right, target)
if(original.val === target.val) {
console.log(cloned.val)
return cloned.val
}
};
Your input:
original = [7,4,3,null,null,6,19]
cloned = [7,4,3,null,null,6,19]
target.val = 3
stdout:
3
Output:
null
Expected:
3
一些问题:
return cloned.val
是错误的。它应该是返回克隆的
original.left = getTargetCopy(original.left, cloned.left, target)
original.right = getTargetCopy(original.right, cloned.right, target)
这不应该发生
if(original.val==target.val)
当target.val
不是唯一值时,代码可能会出现误报。相反,您应该比较节点引用
var getTargetCopy = function(original, cloned, target) {
if(original === null) {
return null
}
if(original === target) {
return cloned;
}
return getTargetCopy(original.left, cloned.left, target)
|| getTargetCopy(original.right, cloned.right, target)
};
使其更加浓缩,可以是:
var getTargetCopy = (original, cloned, target) =>
!original || original === target
? cloned
: getTargetCopy(original.left, cloned.left, target)
|| getTargetCopy(original.right, cloned.right, target);
数据中的树在哪里?@NinaScholz这是二叉树节点的定义方式:函数TreeNode(val){This.val=val;This.left=This.right=null;}@NinaScholz我添加了指向我试图解决的leetcode问题的链接。感谢您的深入回答!我担心我不会得到任何解释,因为有人否决了这篇文章。你能帮助我理解当我克隆控制台日志时,为什么我得到一个数组而不是int?你没有得到数组,而是一个对象(用大括号显示)。int在
cloned
的属性中可用:cloned.val
。能否详细说明此代码块的作用?“return getTargetCopy(original.left,cloned.left,target)| getTargetCopy(original.right,cloned.right,target)”是否正在遍历树?再次感谢你。