学C++的问个java问题。目标是复制一颗树。DefaultMutableTreeNode newNode=new DefaultMutableTreeNode();
void copyTree(DefaultMutableTreeNode oldNode,DefaultMutableTreeNode newNode)
{
if(oldNode!=null)
{
newNode.data = oldNode.data;//这里不对啦,呵呵
newNode.setAllowsChildren(true);
for(int i=0;i<oldNode.getChildCount();i++)
{
newNode.add(new DefaultMutableTreeNode());
copyTree( (DefaultMutableTreeNode) (oldNode.getChildAt(i)),
(DefaultMutableTreeNode)( newNode.getChildAt(i)));
}
}
}有人告诉我有个.Clone();函数,我想知道,如果树这样的结点,.Clone()是克隆一次,还是两层,还是所有层,如果所有曾的话,一个.Clone();不就科隆一颗树了么??着急啊,不快解决好,MM打偶PP啦
void copyTree(DefaultMutableTreeNode oldNode,DefaultMutableTreeNode newNode)
{
if(oldNode!=null)
{
newNode.data = oldNode.data;//这里不对啦,呵呵
newNode.setAllowsChildren(true);
for(int i=0;i<oldNode.getChildCount();i++)
{
newNode.add(new DefaultMutableTreeNode());
copyTree( (DefaultMutableTreeNode) (oldNode.getChildAt(i)),
(DefaultMutableTreeNode)( newNode.getChildAt(i)));
}
}
}有人告诉我有个.Clone();函数,我想知道,如果树这样的结点,.Clone()是克隆一次,还是两层,还是所有层,如果所有曾的话,一个.Clone();不就科隆一颗树了么??着急啊,不快解决好,MM打偶PP啦
所以如果想克隆整颗树,要深度克隆
递归克隆树中的每个子节点
void copyTree(DefaultMutableTreeNode oldNode,DefaultMutableTreeNode newNode)
{
if(oldNode!=null)
{
newNode = ((DefaultMutableTreeNode)oldNode.clone());//这么写对么
newNode.setAllowsChildren(true);
for(int i=0;i<oldNode.getChildCount();i++)
{
newNode.add(null);//这里增加一个null做子结点可以么
copyTree( (DefaultMutableTreeNode) (oldNode.getChildAt(i)),
(DefaultMutableTreeNode)( newNode.getChildAt(i)));
}
}
}
DefaultMutableTreeNode newNode = null;
void copyTree(DefaultMutableTreeNode oldNode,DefaultMutableTreeNode newNode)
{
if(oldNode!=null)
{
newNode = ((DefaultMutableTreeNode)oldNode.clone());//这么写对么
newNode.setAllowsChildren(true);
for(int i=0;i<oldNode.getChildCount();i++)
{
newNode.add(null);//这样增加一个null做子结点可以么
copyTree( (DefaultMutableTreeNode)
(oldNode.getChildAt(i)),
(DefaultMutableTreeNode)
( newNode.getChildAt(i)) );
}
newNode.setAllowsChildren(false);
}
}
{
newNode.setAllowsChildren(true);
if (oldNode != null) {
for (int i = 0; i < oldNode.getChildCount(); ++i) {
try {
DefaultMutableTreeNode node=(DefaultMutableTreeNode) oldNode.getChildAt(i);
newNode.add((DefaultMutableTreeNode)node.clone());
copyTree( (DefaultMutableTreeNode) (oldNode.getChildAt(i)),
(DefaultMutableTreeNode) (newNode.getChildAt(i)));
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}
终于弄好啦,GG给点分啊:)