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

来源:6-4 改进添加操作:深入理解递归终止条件

_银飞仙

2018-10-13

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

写回答

2回答

_银飞仙

提问者

2018-10-14

	//向二分搜索树添加新的元素
	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
0

liuyubobobo

2018-10-13

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


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

0
2
liuyubobobo
回复
_银飞仙
是变量作用域的问题:)因为在private Node add(Node root, E e)中,root是局部变量名,覆盖了类里面的成员变量root。在这个add函数中的root,和类的成员变量root,是两回事儿:)
2018-10-14
共2条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程