为什么我不能传递一个空节点,但我可以通过一个空值
问题描述:
我完成this本文给出了问题,这个答案为什么我不能传递一个空节点,但我可以通过一个空值
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
// if both are null, assign merge tree to null
if (t1 == null && t2 == null) return null;
// if t1 or t2 is null, add 0
int sum = (t1 == null ? 0 : t1.val) + (t2 == null ? 0 : t2.val);
TreeNode tSum = new TreeNode(sum); // declare locally to prevent overwriting
tSum.right = mergeTrees(t1.right, t2.right);
tSum.left = mergeTrees(t1.left, t2.left);
return tSum;
}
,它抛出一个NullPointerException异常时,T1或T2等于空。但是,当我查找正确的答案时,它只是稍有不同。
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
// if both are null, assign merge tree to null
if (t1 == null && t2 == null) return null;
// if t1 or t2 is null, add 0
int sum = (t1 == null ? 0 : t1.val) + (t2 == null ? 0 : t2.val);
TreeNode tSum = new TreeNode(sum); // declare locally to prevent overwriting
// pass null if either == null to avoid nullpointerexception
tSum.right = mergeTrees(t1 == null ? null : t1.right, t2 == null ? null : t2.right);
tSum.left = mergeTrees(t1 == null ? null : t1.left, t2 == null ? null : t2.left);
return tSum;
}
其中不是传递左或右节点值,而是传递null。
为什么java只在第一种情况下抛出一个空指针异常,当两个参数看起来都等于空?
这两个版本的逻辑将允许至少一个传入的'TreeNode'为'null'。然后,在进行递归调用时,可能会引用'null'对象。第二个版本通过检查这个来涵盖它的基础。 –
它比“稍微”不同。在解引用它之前,正确的版本检查每个引用变量的'null'。这是非常不同的,不是轻微的。这是“Aah”和“Aaaagh!”之间的区别巨大差距。 –