当前位置:首页 > 科技  > 软件

Go 构建高效的二叉搜索树联系簿

来源: 责编: 时间:2024-01-17 10:15:24 297观看
导读引言树是一种重要的数据结构,而二叉搜索树(BST)则是树的一种常见形式。在本文中,我们将学习如何构建一个高效的二叉搜索树联系簿,以便快速插入、搜索和删除联系人信息。介绍二叉搜索树图片二叉搜索树是一种有序的二叉树,其

引言

树是一种重要的数据结构,而二叉搜索树(BST)则是树的一种常见形式。在本文中,我们将学习如何构建一个高效的二叉搜索树联系簿,以便快速插入、搜索和删除联系人信息。e1I28资讯网——每日最新资讯28at.com

介绍二叉搜索树

图片图片e1I28资讯网——每日最新资讯28at.com

二叉搜索树是一种有序的二叉树,其中每个节点都包含一个可比较的键和关联的值。它满足以下性质:e1I28资讯网——每日最新资讯28at.com

  • 左子树中的所有节点的键值小于当前节点的键值。
  • 右子树中的所有节点的键值大于当前节点的键值。
  • 没有重复的节点。

二叉搜索树的结构使得在其中插入、搜索和删除节点的操作都能在平均时间复杂度为O(log n)的情况下完成。e1I28资讯网——每日最新资讯28at.com

构建联系簿结构

我们将使用Go语言来实现这个联系簿结构。首先,我们定义一个AddressBookNode结构体,它代表树中的一个节点,并包含姓名、联系信息以及左右子节点的指针。e1I28资讯网——每日最新资讯28at.com

type AddressBookNode struct {    Name         string    ContactInfo  string    Left         *AddressBookNode    Right        *AddressBookNode}

插入联系人

为了将联系人添加到联系簿中,我们实现了InsertContact方法。该方法接受一个姓名和联系信息作为输入,并根据二叉搜索树的性质将联系人插入到合适的位置。e1I28资讯网——每日最新资讯28at.com

func (n *AddressBookNode) InsertContact(name, contactInfo string) *AddressBookNode {    if n == nil {        return &AddressBookNode{Name: name, ContactInfo: contactInfo, Left: nil, Right: nil}    }    if name < n.Name {        n.Left = n.Left.InsertContact(name, contactInfo)    } else if name > n.Name {        n.Right = n.Right.InsertContact(name, contactInfo)    }    return n}

该方法的工作原理如下:e1I28资讯网——每日最新资讯28at.com

  1. 如果当前节点为空,则树为空,我们将使用提供的姓名和联系信息创建一个新的AddressBookNode,并将其作为树的根节点。
  2. 如果当前节点不为空,则将新联系人的姓名与当前节点的姓名进行比较:

如果新姓名小于当前节点的姓名,则在左子树上递归调用InsertContact方法。e1I28资讯网——每日最新资讯28at.com

如果新姓名大于当前节点的姓名,则在右子树上递归调用InsertContact方法。e1I28资讯网——每日最新资讯28at.com

如果新姓名等于当前节点的姓名,则可以根据实际需求进行处理(例如,更新联系信息)。e1I28资讯网——每日最新资讯28at.com

  1. 返回修改后的节点。请注意,尽管在递归调用期间可能会修改树的结构,但根节点保持不变,并且返回修改后的树。

搜索联系人

为了在联系簿中搜索联系人,我们实现了SearchContact方法。该方法接受一个姓名作为输入,并在二叉搜索树中递归搜索匹配的联系人。e1I28资讯网——每日最新资讯28at.com

func (n *AddressBookNode) SearchContact(name string) (string, bool) {    if n == nil {        return "", false    }    if name == n.Name {        return n.ContactInfo, true    }    if name < n.Name {        return n.Left.SearchContact(name)    }    return n.Right.SearchContact(name)}

该方法的工作原理如下:e1I28资讯网——每日最新资讯28at.com

  1. 如果当前节点为空,则表示在树中没有找到指定姓名的联系人,此时方法返回一个空字符串和false。
  2. 如果目标姓名小于当前节点的姓名,则在左子树上递归调用SearchContact方法。
  3. 如果目标姓名大于当前节点的姓名,则在右子树上递归调用SearchContact方法。
  4. 如果目标姓名与当前节点的姓名相等,则表示找到了要搜索的联系人节点。方法返回该节点的联系信息和true。

删除联系人

为了从联系簿中删除联系人,我们实现了DeleteContact方法。该方法接受一个姓名作为输入,并在二叉搜索树中递归删除匹配的联系人。e1I28资讯网——每日最新资讯28at.com

func (n *AddressBookNode) DeleteContact(name string) *AddressBookNode {    if n == nil {        return nil    }    if name < n.Name {        n.Left = n.Left.DeleteContact(name)    } else if name > n.Name {        n.Right = n.Right.DeleteContact(name)    } else {        if n.Left == nil && n.Right == nil {            return nil        } else if n.Left == nil {            return n.Right        } else if n.Right == nil {            return n.Left        }        minNode := n.Right.FindMin()        n.Name = minNode.Name        n.ContactInfo = minNode.ContactInfo        n.Right = n.Right.DeleteContact(minNode.Name)    }    return n}

该方法的工作原理如下:e1I28资讯网——每日最新资讯28at.com

  1. 如果当前节点为空,则表示在树中没有找到指定姓名的联系人,此时方法返回nil。
  2. 如果目标姓名小于当前节点的姓名,则在左子树上递归调用DeleteContact方法。
  3. 如果目标姓名大于当前节点的姓名,则在右子树上递归调用DeleteContact方法。
  4. 如果目标姓名与当前节点的姓名相等,则需要根据节点的情况进行删除操作:

如果目标节点是叶子节点(没有子节点),直接将其设置为nil。e1I28资讯网——每日最新资讯28at.com

如果目标节点只有一个子节点(左子树或右子树),将其子节点替代目标节点的位置。e1I28资讯网——每日最新资讯28at.com

如果目标节点有两个子节点,则找到右子树中的最小节点,将其值复制到目标节点,并递归删除最小节点。e1I28资讯网——每日最新资讯28at.com

总结

通过构建高效的二叉搜索树联系簿,我们可以轻松地插入、搜索和删除联系人信息。使用适当的算法和数据结构,我们能够在O(log n)的时间复杂度内执行这些操作。这对于需要频繁处理联系人信息的应用程序来说尤为重要。e1I28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-63233-0.htmlGo 构建高效的二叉搜索树联系簿

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Docker与Docker Compose入门:释放你应用部署的威力

下一篇: 在 Swift 中如何定义函数、定义可选参数、可变参数和函数类型

标签:
  • 热门焦点
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    作者:黄河懂运营一条性教育视频,被54万人&ldquo;珍藏&rdquo;是什么体验?最近,情感博主@公主是用鲜花做的,火了!仅仅凭借一条视频,光小红书就有超过128万人,为她疯狂点赞!更疯狂的是,这
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein&ldquo;利用市场支配力量强迫服装厂商与之签订独家
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大&ldquo;烤&rdquo;之下的除了众生,还有各大企业发布的ESG报告。ESG是&ldquo;环境保
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
  • onebot M24巧系列一体机采用轻薄机身设计,现已在各平台开售

    onebot M24 巧系列一体机目前已在线上线下各平台同步开售。onebot M24 巧系列采用一体化轻薄机身设计,最薄处为 10.15mm,拥有宝石红、午夜蓝、石墨绿、雅致
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top