[英]How do I traverse two identical trees and return a target value?
有人能告诉我为什么 console.log 输出正确的答案,但是,返回输出 null?
我试图遍历两个相同的树,然后当在原始树的节点中找到目标值时,我试图在克隆树中返回相同的节点值。
我非常感谢您能提供的任何帮助。
原始问题: https : //leetcode.com/problems/find-a-corresponding-node-of-a-binary-tree-in-a-clone-of-that-tree/
代码库:
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
是错误的。 它应该return cloned
通过以下语句,您正在改变原始树:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.