请稍等 ...
×

采纳答案成功!

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

老师您好,关于 6-3 章节二分搜索树里边的 add(root,e)这个方法。

请问二分搜索树里边的 add(root,e)这个方法 里面 的参数传递方式是引用传递吗,为什么不使用 root 去接收,就不会添加元素呢

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

2回答

提问者 _银飞仙 2018-10-14 00:24:34
	//向二分搜索树添加新的元素
	public void add(E e){
		root = add(root,e);
	}
	
	private Node add(Node root,E e){
		if(root == null){
			size ++;
			return new Node(e);
		}else if(e.compareTo(root.e) < 0){
			root.left = add(root.left , e);
		}else{
			root.right = add(root.right , e);
		}
		return root;
	}


代码 root = add(root,e); 

替换成 add(root,e); 后

 为什么执行 add(root,e) 方法后root 没有添加元素。

1 回复 有任何疑惑可以回复我~
liuyubobobo 2018-10-13 22:53:29

在Java里,所有的对象都是引用。


我不很理解你说的用root接受是什么意思,用代码表示一下你的逻辑?

0 回复 有任何疑惑可以回复我~
  • 提问者 _银飞仙 #1
    //向二分搜索树添加新的元素
    	public void add(E e){
    		root = add(root,e);
    	}
    	
    	private Node add(Node root,E e){
    		if(root == null){
    			size ++;
    			return new Node(e);
    		}else if(e.compareTo(root.e) < 0){
    			root.left = add(root.left , e);
    		}else{
    			root.right = add(root.right , e);
    		}
    		return root;
    	}
    
    
    这里的 root = add(root,e);  这行代码
    替换成 add(root,e); 后
    为什么这个 root 属性 执行add(root,e) 方法后root没有添加元素。
    回复 有任何疑惑可以回复我~ 2018-10-14 00:17:23
  • liuyubobobo 回复 提问者 _银飞仙 #2
    是变量作用域的问题:)因为在private Node add(Node root, E e)中,root是局部变量名,覆盖了类里面的成员变量root。在这个add函数中的root,和类的成员变量root,是两回事儿:)
    回复 有任何疑惑可以回复我~ 2018-10-14 00:27:38
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信