我想用java写个二叉树 以下是其中一部分:public class binaryTree {
    class node{
     int value;
     node left;
     node right;
    
    }
        node root=null;
        //一下是函数
        ......
        ......
}其中我想做插入,但是不好使,我经过调试 已经把不好使的原因定在一个点上了,一下是简单化的代码:    public void insertNode(node p, node n){           
         p=n;
    }
    
    public void insert(int num){
     node newNode=new node();
     newNode.value=num;
     newNode.left=newNode.right=null;
     insertNode(root,newNode);
    }
以上的代码只是插入的部分,我做调试用的。
现在的问题是这样 目前只考虑 就加一个节点到root上,但为什么后来测试root总是空的。
也就是在 insert()里 root那个参数 传不到 insertNode()这里
如果我要是把 insertNode()里的 p换成root 那么 新节点就能插入到root了。但是 我传参数传的就是root啊, p就应该是root啊,为什么就不好使呢。  
请大家帮助,谢谢!

解决方案 »

  1.   

    这个问题就和下面的问题是一样的:public class Test2
    {
    public static void fun(int num1, int num2)
    {
    num1 = num2;
    }

    public static void main(String[] args)
    {
    int num1 = 1;
    int num2 = 2;
    fun(num1, num2);
    System.out.println(num1); //函数内部只是对形参进行了修改,对实参无影响,所以打印出来的num1还是1,不是2
    }
    }
    你要在函数内部对形参的对象进行修改的话,你必须对对象的属性进行修改,而不是对其本身进行修改,下面这个例子能够好的说明问题public class Test
    {
    public static void copy(MyStruct struct1, MyStruct struct2)
    {
    struct1 = struct2;
    }

    public static void copy2(MyStruct struct1, MyStruct struct2)
    {
    struct1.num = struct2.num;
    }

    public static void main(String[] args)
    {
    MyStruct struct1 = new MyStruct(1);
    MyStruct struct2 = new MyStruct(2);

    copy(struct1, struct2); //这种方法无法正确赋值
    System.out.println(struct1);

    copy2(struct1, struct2); //这种方法才能正确赋值
    System.out.println(struct1);
    }
    }class MyStruct
    {
    public int num;

    public MyStruct(int num)
    {
    this.num = num;
    }

    public String toString()
    {
    return String.valueOf(num);
    }
    }
      

  2.   

    我那个也没办法修改形参内部属性啊 root 本身没法改啊 我让root指向新节点 这怎么改啊
      

  3.   

    你讲的很明白 我懂了 谢谢你。 但是我不知道如何修改我的那个问题, 如果用c++的话 我知道我可以用×&去解决 或××, 但是java我就不知道在我上述所列例子中 应该如何解决 如何给root 赋值.因为我想尝试用递归,所以才弄成现在这样。如果不用递归我可以写做出来。因为用递归 必须得传参数 但做二叉树插入又必须得传root做参数啊。 如果把root定义成static 之后用类名往里带可以不,还没试,但估计不行吧。刚开始学java 自学 所以磕磕绊绊的 麻烦你了。