2013-03-27 81 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