AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

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

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

引言

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

介紹二叉搜索樹

圖片圖片6uQ28資訊網——每日最新資訊28at.com

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

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

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

構建聯系簿結構

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

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

插入聯系人

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

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

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

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

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

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

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

搜索聯系人

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

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

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

刪除聯系人

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

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

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

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

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

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

總結

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

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

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

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

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

標簽:
  • 熱門焦點
  • 鴻蒙OS 4.0公測機型公布:甚至連nova6都支持

    華為全新的HarmonyOS 4.0操作系統將于今天下午正式登場,官方在發布會之前也已經正式給出了可升級的機型產品,這意味著這些機型會率先支持升級享用。這次的HarmonyOS 4.0支持
  • K60 Pro官方停產 第三方瞬間漲價

    雖然沒有官方宣布,但Redmi的一些高管也已經透露了,Redmi K60 Pro已經停產且不會補貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機在停產之后
  • 盧偉冰長文解析K60至尊版 對Redmi有著里程碑式的意義

    在今天的Redmi后性能時代戰略發布會結束之后,Redmi總經理盧偉冰又帶來了一篇長文,詳解了為什么 Redmi 要開啟后性能時代?為什么選擇和 MediaTek、Pixelworks 深度合作?以及后性
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 《英雄聯盟》夏季賽總決賽今日開打!JDG對陣LNG首發名單來了 Knight:準備三連冠

    8月5日消息,今日17:00,《英雄聯盟》2023LPL夏季賽總決賽將正式開打,由JDG對陣LNG。對兩支隊伍來說,這場比賽不僅要爭奪夏季賽冠軍,更要決定誰才是LPL賽區一
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(niudaocaijing)7月5日,企鵝FM發布官方公告稱由于業務調整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業務走向消亡。騰訊在長音頻領域還在摸索。為
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業發布的ESG報告。ESG是&ldquo;環境保
  • 回歸OPPO兩年,一加贏了銷量,輸了品牌

    成為OPPO旗下主打性能的先鋒品牌后,一加屢創佳績。今年618期間,一加手機全渠道銷量同比增長362%,憑借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
Top