0
我完成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!」之間的區別巨大差距。 –