我想反映一個二叉樹,使左邊的所有節點都結束在右邊,反之亦然。兩種遞歸方法之間的區別
喜歡的東西:
A
/ \
B C
/ / \
D E F
將成爲
A
/ \
C B
/\ \
F E D
我注意到,在寫我的解決方案,這個代碼工作:
static Tree getReflection(Tree root) {
if(root == null) {
return null;
}
Tree reflect = root;
Tree subRight = getReflection(root.right);
Tree subLeft = getReflection(root.left);
reflect.left = subRight;
reflect.right = subLeft;
return reflect;
}
然而,這一次沒有按」 t:
static Tree getReflection(Tree root) {
if(root == null) {
return null;
}
Tree reflect = root;
reflect.left = getReflection(root.right);
reflect.right = getReflection(root.left);
return reflect;
}
有人可以向我解釋爲什麼?對我來說,除了使用臨時樹變量外,它們看起來像是相同的方法。
所以我應該做一些像Tree reflect = new Tree(root.value)的東西。那麼它會創建一個新對象而不是指向原始根的指針?這個想法是否正確? – Fiass
沒錯。你必須以某種方式得到新的副本,並且你的建議可以做到。 – Prune