二叉树的创建(二)

288 阅读3分钟

小知识,大挑战!本文正在参与「程序员必备小知识」创作活动

目录

  • 前言

  • 正文

    1. size()方法

    2. put(Key key,Value value)方法

    3. put(Node x,Key key,Value value)方法

    4. get(Key key)方法

    5. get(Node x,Key key)方法

    6. delete(Key key)方法

    7. delete(Node x,Key key)方法

前言

日常生活中,很多事物都可以用树来描述,例如书的目录、工作单位的组织架构等等。树是计算机中非常重要的一种数据结构,树存储方式可以提高数据的存储、读取效率。

正文

今天,我们重点来看一下如何创建二叉树。接下来,我们通过代码来描述二叉树,语言以Java为例,其中结点类定义如下:

二叉查找树类定义如下:

相关类定义好后,我们来看具体的方法实现,下面分别介绍。

1. size()方法

size()方法相对简单,每次添加元素加一,删除元素减一,维护一个公共的变量 num 即可,代码实现如下:

image.png

2. put(Key key,Value value)方法

put(Key key,Value value)方法可以利用重载方法 put(Node x,Key key,Value value),因此实现也相对简单,其中第一个参数只需要传根结点即可,代码实现如下:

image.png

3. put(Node x,Key key,Value value)方法

put(Node x,Key key,Value value)方法应该是整个类中实现相对较为复杂的,下面进行简单的分析。

第一种情况,当前树中没有任何一个结点,直接将新插入的结点作为根结点。

image.png

第二种情况,当前树不为空,则从根结点开始。这种情况有可以细分为三种情况:

1)如果新结点的key小于当前结点的key,则继续查找当前结点的左子结点。

image.png

2)如果新结点的key大于当前结点的key,则继续查找当前结点的右子结点。

image.png

3)如果新结点的key等于当前结点的key,则树中已经存在这样的结点,替换该结点的value值即可。

具体的代码实现如下:

image.png

4. get(Key key)方法

get(Key key)方法和 put(Key key,Value value)方法类似,也可以利用重载方法 get(Node x,Key key)来实现,代码实现如下:

image.png

5. get(Node x,Key key)方法

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

具体的代码实现如下:

image.png

通过上面的代码,我们可以看出 get()方法和 put()方法类似,都是通过递归调用实现的。

6. delete(Key key)方法

delete(Key key)方法也是一样的思路,调用后面的重载方法就行了,代码实现如下:

image.png

7. delete(Node x,Key key)方法

删除方法的实现思路,以最复杂的情况为例,首先找到被删除的结点,找到被删除结点右子树中的最小结点 minNode,删除右子树中的最小结点,让被删除结点的左子树成为最小结点 minNode 的左子树,让被删除结点右子树成为最小结点minNode的右子树,让被删除结点的父结点指向最小结点 minNode。

具体的代码实现如下:

image.png

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

image.png

答案输出:

3

李四

2

Nice,太好了,通过上述输出结果已经证明了程序是正确的。