5. get(Node x,Key key)方法
get(Node x,Key key)方法实现查询方法从根结点开始,如果要查询的key小于当前结点的key,则继续找当前结点的左子结点;如果要查找的key大于当前结点的key,则继续找当前结点的右子结点;如果要查找的key等于当前结点的key,则返回当前结点的value。
具体的代码实现如下:

通过上面的代码,我们可以看出 get()方法和 put()方法类似,都是通过递归调用实现的。
6. delete(Key key)方法
delete(Key key)方法也是一样的思路,调用后面的重载方法就行了,代码实现如下:

7. delete(Node x,Key key)方法
删除方法的实现思路,以最复杂的情况为例,首先找到被删除的结点,找到被删除结点右子树中的最小结点 minNode,删除右子树中的最小结点,让被删除结点的左子树成为最小结点 minNode 的左子树,让被删除结点右子树成为最小结点minNode的右子树,让被删除结点的父结点指向最小结点 minNode。
具体的代码实现如下:


既然代码已经写完了,接下来通过代码来验证一下,看看我们写得是否正确:

答案输出:
3
李四
2
Nice,太好了,通过上述输出结果已经证明了程序是正确的。
四、查找二叉树中最小和最大的键
比如二叉树中用来记录某个公司员工薪资和员工姓名数据,或者某班级学生们的排名和姓名数据。如何快速找出排名最高和最低的同学数据?
这样的话,该怎么做呢?其实,一般还可以整理出如下四个方法,定义如下:

1. min()方法
min()方法和上面提到的 get()和 put()方法类似,也可以使用下面的重载方法实现,具体代码如下:
// 找出树中最小的键
public key min() {
return min(root).key;
}
2. min(Node x)方法
min(Node x)方法需要根据传入的结点位置,查找左子树中的最小的结点,如果为空,则直接返回空,具体代码实现如下:
// 找出树中最小键所在的结点
public Node min(Node x) {
if (x == null) {
return x;
}
Node minNode = x;
while (minNode.left != null) {
minNode = minNode.left;
}
return minNode;
}
3. max()方法
max()方法和上面提到的 min()方法类似,也可以使用下面的重载方法实现,具体代码如下: