2013-03-27 71 views
0

我有一個二叉樹,通過鏈接節點實現(使用:int元素,BinaryNode左邊,BinaryNode右邊,BinaryNode父屬性)。我想從根開始將第n個節點設置爲x。即如果n = 3,那麼我想做root.left.left.left = x。通過for循環設置二叉樹節點的左屬性

起初,我想下面的設置一個臨時變量BinaryNode和做:

BinaryNode temp = root; 
BinaryNode x = new BinaryNode(10, null, null, null); 

for (int i = 0; i < n; i++){ 
    temp = temp.left; 
} 

然後一旦我到了最後,我想說,temp.left = X,後來我認識到/認爲這樣做不會對實際的樹做任何事情,因爲temp只是根的一個副本?

所以我怎麼去試圖做到這一點? :<

回答

0

在你的榜樣,temp不是根的副本。這是一個參考到根。因此,您的代碼實際上會修改原始樹。但是,你還有另外一個問題 - 如果樹中沒有那麼多節點呢?換句話說,如果n是5並且在節點鏈中只有三個節點,那麼最終將得到NullPointerException。當你沿着鏈條走時,你需要檢查空值。

0

我認爲這應該工作

private void replace(BinaryNode node, int n, int x) { 
    if (n==0) { 
     node.x = x 
     return; 
    } 
    if (node.left != null) 
     replace(node.left, n-1, x); 
} 

而且隨着replace(root, 3, 10)叫它例如

+0

雖然這不會有同樣的問題嗎?由於節點是一個單獨的BinaryNode,而不是樹本身的一部分... – 2013-03-27 01:10:13

+0

哦,那有用,我想。讓我嘗試實施它 – 2013-03-27 01:25:03