[英]Is it possible to perform checks on what may be an uninitialized variable?
我正在研究一種遞歸方法...
public BinaryTree<T> TreeMirror ( BinaryTree<T> tree ) {
BinaryTree mirror = new BinaryTree();
mirror = clone(tree);
...
TreeMirror(...)
...
}
我不希望該方法在每個遞歸步驟中使mirror
引用不同的 BinaryTree BinaryTree
,也不希望在第一次迭代后重復mirror = clone(tree)
語句。 我想知道是否可以進行 if 語句檢查以查看mirror
的實例是否已經初始化——在這種情況下mirror = new BinaryTree()
和mirror = clone(tree)
語句將被跳過。
如果不將mirror
作為參數傳遞給方法或在 class 定義中定義它,我認為這是不可能的......但我想確定一下。
非常感謝任何建議。
- - - - -編輯 - - - - - -
我不允許更改方法簽名,因此我無法在我的實現中傳遞 object。 我可以創建鏡像樹,但只能通過將原始樹修改為鏡像,這是我想盡量避免的。 我試圖創建一個新的 BinaryTree BinaryTree
,它是傳入的原始樹的鏡像,但實際上無法弄清楚如何遞歸地執行它。
很少看到像這樣的公共遞歸函數。 更好的解決方案可能是使用創建 object 的公共方法,然后調用私有 function 遞歸,只進行必要的更改。
通常很難讓遞歸 function 簽名與您想向客戶展示的內容相匹配。
鏡像變量是方法的本地變量,並且總是在每次調用中都被初始化。
將 mirror 作為參數傳遞給該方法是一個非常好的選擇。
編輯:如果你不能修改方法簽名,你可以創建一個私有方法並調用它來執行遞歸嗎?
“如果不將 mirror 作為參數傳遞給方法或在 class 定義中定義它,我認為這是不可能的……但我想確定一下。”
正確,這將是做你想做的事情的一種方法,因為鏡像不是遞歸不變量。
另一種方法是您的遞歸算法僅克隆節點,而不是整個子樹。
Uri 的答案是最好的......將其重構為私有方法並簡單地初始化鏡像,然后調用私有(recrsive)方法將鏡像作為參數傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.