Re: Specific Cloning Question



Alex wrote:
Oliver Wong wrote:
"Alex" <alexander.webb@xxxxxxxxx> wrote in message
news:1158934564.874336.109020@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
I am not entirely sure what you mean by a "recursive solution". I have
tried cloning the tree by cloning all the nodes in it. However the
problem here is that when I try to clone Node A it has a reference to
Node B as its parent so Node B gets cloned. But when I am cloning Node
B, it has a reference to Node A as its child it goes back to trying to
clone A again.
If you only clone in "one direction", you can avoid this problem. For
example, cloning a node Foo wil clone it, and all of its children, but none
of its parents.

Alternatively, you could wrap all your nodes in an actual Tree object,
and put a clone method on the tree, and not on any of the nodes themselves,
and have the tree orchestrating the cloning of the nodes.

- Oliver

Ok, so I think it's the second thing that I have tried to do. But the
problem is I still need to clone the actual nodes otherwise the cloned
tree with have references to the same original nodes and when I change
one, it will change the other. And it's the cloning of the nodes that
seems to cause the problem.

With the first suggestion, it sounds good. I am not entirely sure how
to work my way down the tree from the top and make sure I clone all
nodes since at each point, we branch and have two more nodes to clone.
I guess if the tree isn't too big it's not too bad to keep a list of
things that need to be cloned. Any idea?

Alex


Here's a rough cut at one way of doing it, without explicit bookkeeping:

DANGER! DANGER! UNTESTED CODE AHEAD!

public MyNode subtreeCopy(MyNode root, MyNode parent){
if(root == null){
return null;
}
MyNode copy = new MyNode();
copy.parent = parent;
copy.left = subtreeCopy(root.left,copy);
copy.right = subtreeCopy(root.right,copy);
return copy;
}

public MyNode treeCopy(MyNode root){
return subtreeCopy(root,null);
}

This probably isn't exactly what you need, but if you get the idea, you
should be able to apply it to your problem.

Patricia
.



Relevant Pages

  • Re: Specific Cloning Question
    ... tried cloning the tree by cloning all the nodes in it. ... problem here is that when I try to clone Node A it has a reference to ... it has a reference to Node A as its child it goes back to trying to ... Alternatively, you could wrap all your nodes in an actual Tree object, ...
    (comp.lang.java.help)
  • Re: Specific Cloning Question
    ... tried cloning the tree by cloning all the nodes in it. ... problem here is that when I try to clone Node A it has a reference to ... Node B as its parent so Node B gets cloned. ... Alternatively, you could wrap all your nodes in an actual Tree object, and put a clone method on the tree, and not on any of the nodes themselves, and have the tree orchestrating the cloning of the nodes. ...
    (comp.lang.java.help)
  • Re: Specific Cloning Question
    ... I am not entirely sure what you mean by a "recursive solution". ... tried cloning the tree by cloning all the nodes in it. ... problem here is that when I try to clone Node A it has a reference to ... you could wrap all your nodes in an actual Tree ...
    (comp.lang.java.help)
  • Re: Specific Cloning Question
    ... > tried cloning the tree by cloning all the nodes in it. ... > clone A again. ... Alternatively, you could wrap all your nodes in an actual Tree object, ... You don't need to keep an explicit list if you use a recursive solution instead. ...
    (comp.lang.java.help)
  • Re: Cloning ethics in science fiction - help?
    ... the quote about cloning being the sin of vanity if I can find it back ... CLONE page of ULTIMATE SCIENCE FICTION WEB GUIDE ...
    (rec.arts.sf.composition)