日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Go 構建高效的二叉搜索樹聯系簿

來源: 責編: 時間:2024-01-17 10:15:24 234觀看
導讀引言樹是一種重要的數據結構,而二叉搜索樹(BST)則是樹的一種常見形式。在本文中,我們將學習如何構建一個高效的二叉搜索樹聯系簿,以便快速插入、搜索和刪除聯系人信息。介紹二叉搜索樹圖片二叉搜索樹是一種有序的二叉樹,其

引言

樹是一種重要的數據結構,而二叉搜索樹(BST)則是樹的一種常見形式。在本文中,我們將學習如何構建一個高效的二叉搜索樹聯系簿,以便快速插入、搜索和刪除聯系人信息。2cs28資訊網——每日最新資訊28at.com

介紹二叉搜索樹

圖片圖片2cs28資訊網——每日最新資訊28at.com

二叉搜索樹是一種有序的二叉樹,其中每個節點都包含一個可比較的鍵和關聯的值。它滿足以下性質:2cs28資訊網——每日最新資訊28at.com

  • 左子樹中的所有節點的鍵值小于當前節點的鍵值。
  • 右子樹中的所有節點的鍵值大于當前節點的鍵值。
  • 沒有重復的節點。

二叉搜索樹的結構使得在其中插入、搜索和刪除節點的操作都能在平均時間復雜度為O(log n)的情況下完成。2cs28資訊網——每日最新資訊28at.com

構建聯系簿結構

我們將使用Go語言來實現這個聯系簿結構。首先,我們定義一個AddressBookNode結構體,它代表樹中的一個節點,并包含姓名、聯系信息以及左右子節點的指針。2cs28資訊網——每日最新資訊28at.com

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

插入聯系人

為了將聯系人添加到聯系簿中,我們實現了InsertContact方法。該方法接受一個姓名和聯系信息作為輸入,并根據二叉搜索樹的性質將聯系人插入到合適的位置。2cs28資訊網——每日最新資訊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}

該方法的工作原理如下:2cs28資訊網——每日最新資訊28at.com

  1. 如果當前節點為空,則樹為空,我們將使用提供的姓名和聯系信息創建一個新的AddressBookNode,并將其作為樹的根節點。
  2. 如果當前節點不為空,則將新聯系人的姓名與當前節點的姓名進行比較:

如果新姓名小于當前節點的姓名,則在左子樹上遞歸調用InsertContact方法。2cs28資訊網——每日最新資訊28at.com

如果新姓名大于當前節點的姓名,則在右子樹上遞歸調用InsertContact方法。2cs28資訊網——每日最新資訊28at.com

如果新姓名等于當前節點的姓名,則可以根據實際需求進行處理(例如,更新聯系信息)。2cs28資訊網——每日最新資訊28at.com

  1. 返回修改后的節點。請注意,盡管在遞歸調用期間可能會修改樹的結構,但根節點保持不變,并且返回修改后的樹。

搜索聯系人

為了在聯系簿中搜索聯系人,我們實現了SearchContact方法。該方法接受一個姓名作為輸入,并在二叉搜索樹中遞歸搜索匹配的聯系人。2cs28資訊網——每日最新資訊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)}

該方法的工作原理如下:2cs28資訊網——每日最新資訊28at.com

  1. 如果當前節點為空,則表示在樹中沒有找到指定姓名的聯系人,此時方法返回一個空字符串和false。
  2. 如果目標姓名小于當前節點的姓名,則在左子樹上遞歸調用SearchContact方法。
  3. 如果目標姓名大于當前節點的姓名,則在右子樹上遞歸調用SearchContact方法。
  4. 如果目標姓名與當前節點的姓名相等,則表示找到了要搜索的聯系人節點。方法返回該節點的聯系信息和true。

刪除聯系人

為了從聯系簿中刪除聯系人,我們實現了DeleteContact方法。該方法接受一個姓名作為輸入,并在二叉搜索樹中遞歸刪除匹配的聯系人。2cs28資訊網——每日最新資訊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}

該方法的工作原理如下:2cs28資訊網——每日最新資訊28at.com

  1. 如果當前節點為空,則表示在樹中沒有找到指定姓名的聯系人,此時方法返回nil。
  2. 如果目標姓名小于當前節點的姓名,則在左子樹上遞歸調用DeleteContact方法。
  3. 如果目標姓名大于當前節點的姓名,則在右子樹上遞歸調用DeleteContact方法。
  4. 如果目標姓名與當前節點的姓名相等,則需要根據節點的情況進行刪除操作:

如果目標節點是葉子節點(沒有子節點),直接將其設置為nil。2cs28資訊網——每日最新資訊28at.com

如果目標節點只有一個子節點(左子樹或右子樹),將其子節點替代目標節點的位置。2cs28資訊網——每日最新資訊28at.com

如果目標節點有兩個子節點,則找到右子樹中的最小節點,將其值復制到目標節點,并遞歸刪除最小節點。2cs28資訊網——每日最新資訊28at.com

總結

通過構建高效的二叉搜索樹聯系簿,我們可以輕松地插入、搜索和刪除聯系人信息。使用適當的算法和數據結構,我們能夠在O(log n)的時間復雜度內執行這些操作。這對于需要頻繁處理聯系人信息的應用程序來說尤為重要。2cs28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-63233-0.htmlGo 構建高效的二叉搜索樹聯系簿

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Docker與Docker Compose入門:釋放你應用部署的威力

下一篇: 在 Swift 中如何定義函數、定義可選參數、可變參數和函數類型

標簽:
  • 熱門焦點
  • 石頭智能洗地機A10 Plus體驗:雙向自清潔治好了我的懶癌

    一、前言和介紹專為家庭請假懶人而生的石頭科技在近日又帶來了自己的全新旗艦新品,石頭智能洗地機A10 Plus。從這個產品名上就不難看出,這次石頭推出的并不是常見的掃地機器
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 一文看懂為蘋果Vision Pro開發應用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現實(MR)頭戴設備。Vision Pro結合了虛擬現實(VR)和增強現實(AR)的沉浸感。其高分辨率顯示屏、先進的傳感器和強大的處理能力
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的&ldquo;頭騰
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業發布的ESG報告。ESG是&ldquo;環境保
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時代麒麟電池,容量為101kWh,電壓為726.7V,可以預測小
  • 國行版三星Galaxy Z Fold5/Z Flip5發布 售價7499元起

    2023年8月3日,三星電子舉行Galaxy新品中國發布會,正式在國內推出了新一代折疊屏智能手機三星Galaxy Z Fold5與Galaxy Z Flip5,以及三星Galaxy Tab S9
  • SN570 NVMe SSD固態硬盤 價格與性能兼具

    SN570 NVMe SSD固態硬盤是西部數據發布的最新一代WD Blue系列的固態硬盤,不僅閃存技術更為精進,性能也得到了進一步的躍升。WD Blue SN570 NVMe SSD的包裝外
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學的小東加入了一個大學生兼職QQ群。群主&ldquo;七王&rdquo;在群里介紹一些刷單賺
Top 主站蜘蛛池模板: 霍邱县| 盐源县| 桐城市| 鄯善县| 龙胜| 梓潼县| 卫辉市| 芦山县| 建昌县| 南投县| 康保县| 社旗县| 蒙城县| 咸丰县| 兴安盟| 泽普县| 寻乌县| 会宁县| 富平县| 阿拉善右旗| 德安县| 潮安县| 清苑县| 年辖:市辖区| 广水市| 黎川县| 科技| 乡宁县| 鱼台县| 岳池县| 嘉善县| 揭西县| 长春市| 永城市| 织金县| 枣强县| 应城市| 华蓥市| 深泽县| 湟源县| 博罗县|