美文网首页程序员
二叉查找数 golang实现

二叉查找数 golang实现

作者: Tibbersshao | 来源:发表于2018-10-17 23:56 被阅读0次

首先定义数据结构,这个不用多说,这里添加了一个size,这样就可以在o(1)的时间复杂度内获取这个二叉树的大小。


image.png

首先要写的是添加节点(put)接口:通过和当前节点的key比较,如果相等就更新val,如果小于就遍历左节点,反之则遍历右节点。


image.png

如果没有找到就创建一个新节点:


image.png

然后是 get接口,这个接口也比较简单,和put类似,左右遍历即可:


image.png

个人认为二叉查找数最大的难点是删除一个树节点
有4种情况:
1,待删除节点的左右节点都为null,直接返回null
2,待删除节点的左节点为null,直接返回右节点
3,待删除节点的右节点为null,直接返回左节点
4,待删除节点的左右节点都不为null, 一种普遍的做法是用该节点的右节点的最小的节点来代替这个节点来保持二叉数的稳定。
手画图:


image.png

具体代码如下
先写出删除该树的最小节点和找到这个树的最小节点。这两个函数相对比较简单


image.png
然后是具体的删除函数:
image.png
这是比较关键的代码:
image.png
先获取待删除节点的右节点的最小节点,使新节点的右节点等于原节点的有节点删除最小节点后的值(即删除获取到的新节点),左节点就等于原节点的左节点。

用中序遍历验证函数的正确性:


image.png

代码写的不好或者有bug的地方,欢迎各位大佬来拍砖。

参考:算法(第四版)

相关文章

  • 二叉查找数 golang实现

    首先定义数据结构,这个不用多说,这里添加了一个size,这样就可以在o(1)的时间复杂度内获取这个二叉树的大小。 ...

  • 二叉树 堆 2019-04-17

    二叉树 实现一个二叉查找树,并且支持插入、删除、查找操作 实现查找二叉查找树中某个节点的后继、前驱节点 实现二叉树...

  • 7天练|Day5:二叉树和堆

    关于二叉树和堆的7个必知必会的代码实现二叉树实现一个二叉查找树,并且支持插入、删除、查找操作实现查找二叉查找树中某...

  • 二叉查找树

    1)二叉查找树是什么?2)二叉查找树的插入、删除、查找?3)Go代码实现 一、二叉查找树是什么?二叉查找树(BST...

  • golang实现二叉查找树

    为简单起见,键值均为整型。 定义接口(tree.go): 二叉查找树(binary_tree.go): 节点(no...

  • 二叉查找树的查找和排序方法的实现

    定义二叉树 二叉查找树的查找和排序方法的实现

  • 查找(二叉查找数)

    二叉查找数 定义 一个二叉查找数(BST)是一颗二叉树,其中每个结点都含有一个Comparable的键以及相关联的...

  • 6. 二叉树创建-查找

    1. 递归方式实现二叉树的构建2. 树、二叉树、二叉查找树3. 二叉树排序树的理解4. 二叉查找树5. 二叉树的查找

  • leetcode two sums 比较傻x的实现方式

    装逼了 用的二叉搜索树 效率低到爆 下面是golang自带map实现(大部分golang方法)

  • golang循环递增数组查找值

    循环递增数组查找值 golang 1.实现要求 在循环递增数组中查找某个值 2.实现方法 使用二分法实现查找 使用...

网友评论

    本文标题:二叉查找数 golang实现

    本文链接:https://www.haomeiwen.com/subject/qvmdzftx.html