Golang二叉查找树

前端之家收集整理的这篇文章主要介绍了Golang二叉查找树前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

为简单起见,键值均为整型。


定义接口(tree.go):

  
  
type @H_404_28@Tree@H_404_28@ @H_404_28@interface@H_404_28@ @H_404_28@{@H_404_28@ @H_404_28@Put@H_404_28@(@H_404_28@k@H_404_28@,@H_404_28@ v @H_404_28@int@H_404_28@)@H_404_28@ @H_404_28@//新增或修改@H_404_28@ @H_404_28@Get@H_404_28@k @H_404_28@int@H_404_28@//查询@H_404_28@ @H_404_28@Delete@H_404_28@//删除@H_404_28@ @H_404_28@Size@H_404_28@()@H_404_28@//树的大小@H_404_28@ @H_404_28@Min@H_404_28@//最小键@H_404_28@ @H_404_28@DeleteMin@H_404_28@//删除最小键@H_404_28@}@H_404_28@
二叉查找树(binary_tree.go):
//二叉查找树@H_404_28@type @H_404_28@BinaryTree@H_404_28@struct@H_404_28@ root @H_404_28@*@H_404_28@node@H_404_28@ n @H_404_28@}@H_404_28@//创建节点@H_404_28@func newNode@H_404_28@node @H_404_28@return@H_404_28@&@H_404_28@node@H_404_28@:@H_404_28@ k@H_404_28@ v@H_404_28@ sz@H_404_28@ @H_404_28@1@H_404_28@}@H_404_28@//创建二叉查找树@H_404_28@func @H_404_28@NewBinaryTree@H_404_28@*@H_404_28@BinaryTree@H_404_28@&@H_404_28@BinaryTree@H_404_28@{}@H_404_28@//增加修改@H_404_28@func @H_404_28@bt @H_404_28@*@H_404_28@BinaryTree@H_404_28@ bt@H_404_28@.@H_404_28@root@H_404_28@ _ @H_404_28@=@H_404_28@ put@H_404_28@bt@H_404_28@)@H_404_28@//查找@H_404_28@get@H_404_28@ size@H_404_28@//选出最小键@H_404_28@ min@H_404_28@).@H_404_28@//删除最小键@H_404_28@root @H_404_28@ deleteMin@H_404_28@delete@H_404_28@}@H_404_28@
节点(node.go):
//节点@H_404_28@type node @H_404_28@ sz @H_404_28@//键,值,大小@H_404_28@ left@H_404_28@ right @H_404_28@node @H_404_28@//左右子节点@H_404_28@//在以nd为根节点的树下增加修改一个节点@H_404_28@//如果创建了新节点,第二个参数返回true,@H_404_28@//如果只是修改,第二个参数返回false@H_404_28@func put@H_404_28@nd @H_404_28@(*@H_404_28@bool@H_404_28@if@H_404_28@ nd @H_404_28@==@H_404_28@nil@H_404_28@ newNode@H_404_28@),123)">true@H_404_28@}@H_404_28@ hasNew @H_404_28@:=@H_404_28@false@H_404_28@//检测是否创建了新节点@H_404_28@ k @H_404_28@<@H_404_28@ nd@H_404_28@k @H_404_28@left@H_404_28@nd@H_404_28@else@H_404_28@>@H_404_28@right@H_404_28@v @H_404_28@ v @H_404_28@//仅修改,不会增加增加节点,就不更新节点大小@H_404_28@//如果创建了新节点就更新树的大小@H_404_28@ updateSize@H_404_28@ hasNew@H_404_28@//在以nd为根节点的树中获取键为k的值@H_404_28@func @H_404_28@ k @H_404_28@-@H_404_28@1@H_404_28@v@H_404_28@//获取以nd为根节点的树的大小@H_404_28@func size@H_404_28@0@H_404_28@sz@H_404_28@//更新以nd为根节点的树的大小@H_404_28@func updateSize@H_404_28@sz @H_404_28@+@H_404_28@//选出以nd为根节点的树的最小键节点@H_404_28@func min@H_404_28@left @H_404_28@!=@H_404_28@//删除以nd为根节点的树的最小键节点@H_404_28@//返回被删除的节点@H_404_28@func deleteMin@H_404_28@//找到最小节点@H_404_28@right @H_404_28@//用右子节点代替自己@H_404_28@//还有更小的@H_404_28@//删除以nd为根节点的树并且键为k的节点@H_404_28@right @H_404_28@//命中要删除的节点@H_404_28@//只有一个或零个子节点@H_404_28@left@H_404_28@right@H_404_28@//同时具有两个子节点@H_404_28@//先找出大于本节点的最小节点作为后继节点@H_404_28@ t @H_404_28@ nd@H_404_28@t@H_404_28@k@H_404_28@//用后继节点代替本节点@H_404_28@ t@H_404_28@}@H_404_28@

猜你在找的Go相关文章