学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啦

解决方案 »

  1.   

    .Clone()是克隆一层
    所以如果想克隆整颗树,要深度克隆
    递归克隆树中的每个子节点
      

  2.   

    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)));
    }
    }
    }
      

  3.   

    上边不算
    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);
    }
    }
      

  4.   

    void copyTree(DefaultMutableTreeNode oldNode,DefaultMutableTreeNode newNode)
    {
      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给点分啊:)
      

  5.   

    GG还不结帖?再不结真打PP啦 :)
      

  6.   

    newNode.setAllowsChildren(true);这句放到if里面更好吧