CL545740896 2017-04-15 03:50 采纳率: 100%
浏览 905
已采纳

关于Java对象克隆的问题 求指教~

 package 二叉树;

/*
 * 二叉树的构建
 * Cloneable 创建一个相同的对象,当克隆出来的对象与原对象拥有不同的地址
 */

public class TreeNode implements Cloneable{
   int val;
   TreeNode left;
   TreeNode right;
   TreeNode(int x) {this.val=x;}
   @Override
   public boolean equals(Object other) {
       if(this == other)                                      //先检查是否其自反性,后比较other是否为空。这样效率高
           return true;
          if(other == null)         
           return false;
          if( !(other instanceof TreeNode))
           return false;
          final TreeNode treeNode = (TreeNode)other;
          if(this.val!=treeNode.val)
            return false;
        return true;
   }
   @Override
   protected Object clone()  {
      Object treeNode=null;
      try {
          treeNode=super.clone();

    } catch (Exception e) {
        System.out.println("Erro:"+e);
    }
       return  treeNode;
   }
}

 package 二叉树;
/*
 * 二叉树的反转
 * 前序 :根左右
 * 中序 :左根右
 */

public class InverTree {
    /*
     * 反转二叉树的方法
     */
    public TreeNode invert(TreeNode root) {
        if(root!=null)
        {
            TreeNode tmp=null;
            tmp=root.right;
            root.right=root.left;
            root.left=tmp;
            invert(root.right);
            invert(root.left);
            return root;
        }
        return null;
    }
    /*
     * 中序遍历二叉树
     */
    public void printData(TreeNode root) {
        System.out.print(root.val+"->");

    }
    public void  Preout(TreeNode root)
    {   printData(root);
        if(root.left!=null)
        {
            Preout(root.left);
        }
        if(root.right!=null)
        {

            Preout(root.right);
        }
    }
    public void  Midout(TreeNode root)
    {  
        if(root.left!=null)
        {
            Midout(root.left);
        }
        printData(root);
        if(root.right!=null)
        {

            Midout(root.right);
        }
    }
    public static void main(String[] args) throws CloneNotSupportedException  {
         TreeNode root=new TreeNode(0);
         root.left=new TreeNode(1);
         root.right=new TreeNode(2);
         root.left.left=new TreeNode(3);
         root.left.right=new TreeNode(4);
         TreeNode temproot=(TreeNode) root.clone();

          InverTree inverTree=new InverTree();
          System.out.println("反转前的二叉树:");
          System.out.println("中序:");
          inverTree.Midout(root);
          System.out.println("\n前序:");
          inverTree.Preout(root);

          inverTree.invert(root);
          System.out.print("\n反转后的二叉树:\n");
          System.out.println("中序:");
          inverTree.Midout(root);
          System.out.println("\n前序:");
//        inverTree.Preout(temproot);  //此处的值与 inverTree.Preout(root);不同,Why?不是已经克隆了吗
          inverTree.Preout(root);




    }

}


输出结果:

反转前的二叉树:
中序:
3->1->4->0->2->
前序:
0->1->3->4->2->
反转后的二叉树:
中序:
2->0->4->1->3->
前序:
0->1->4->3->2-> //正确的克隆结果应该是0->1->3->4->2->
0->2->1->4->3->

是不是我重写的克隆方法有错?

  • 写回答

2条回答 默认 最新

  • threenewbee 2017-04-15 04:17
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料