请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师您好,想问一下插入操作的私有方法为什么要返回根节点呢,我写了一个void方法,不知道可不可以

private void add(Node root, E data){
if (root == null){
root = new Node(data);
return ;
}
if (data.compareTo(root.data) < 0){
add(root.leftChild, data);
}else if(data.compareTo(root.data) > 0){
add(root.rightChild, data);
}
}
不过目前有一个问题是当我用调用这个方法的时候,通过调试我发现我的二叉树对象的root总是为null,我不是已经判断在root为null时new一个node了吗,为什么每次添加元素后二叉树对象的root还是null呢

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2019-02-16 17:57:41

完全是这个问题,可以参考这里:https://coding.imooc.com/learn/questiondetail/94099.html


针对你的叙述,要注意:你在这个add函数中的root变量,和类声明中的root不是一个变量!add函数中的root是传进来的函数参数,根据变量的作用域原则,会覆盖类定义中的root:)


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕工程2252263 #1
    public void add(E data){
            add(root, data);
            size ++;
        }
    但老师,我在公共方法里是这样调用私有方法的,java不是通过引用传值么,那我传进去的root也不会改变吗?
    回复 有任何疑惑可以回复我~ 2019-02-16 18:45:56
  • liuyubobobo 回复 提问者 慕工程2252263 #2
    不会。Java的引用等于C++的指针。你可以理解成复制了一个指针变量指向同一片内存空间。root = new Node(data);只是修改了指针的指向而已,而不会修改内存。随便写一个函数,做个试验,传参,修改,看看函数内外,这个变量发生没发生改变?:)
    回复 有任何疑惑可以回复我~ 2019-02-16 18:52:36
  • 提问者 慕工程2252263 回复 liuyubobobo #3
    我明白了,谢谢老师!
    回复 有任何疑惑可以回复我~ 2019-02-16 23:41:25
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信