二叉树的复制(java函数中传引用只能改变引用内容不能改变引用指向)

上代码 展现神奇

//错误代码 

public static void buildSameTree(TreeNode pRoot,TreeNode root){
        if(pRoot==null){
            return ;
        }
        root = new TreeNode(pRoot.val);

        buildSameTree(pRoot.left, root.left);
        buildSameTree(pRoot.right, root.right);

    }

错误原因分析:其实用c++的引用时没问题的(强行狡辩一波) 。
1》对于每一个的root.left 的本来指向null 但是因为递归传入函数中指向新建的节点
2》当返回的时候,root.left又重新指向null
3》这样造成每一个新建节点之间是孤立的
4》就拿第一个节点来说,当root为null 然后root指向一个new的空间 返回时root重新指向null

//正确代码
// public static TreeNode buildSameTree(TreeNode pRoot){
// if(pRoot==null){
// return null;
// }
// TreeNode root = new TreeNode(pRoot.val);
// root.left = buildSameTree(pRoot.left);
// root.right = buildSameTree(pRoot.right);
// return root;
// }

解决的方法

  1. 将root.left的地址返回相同的地址,而且对于这个地址的值进行了复制。也就是相当于地址和空间都返回出来了。

你可能感兴趣的:(java,函数)