欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go?數(shù)據(jù)結(jié)構(gòu)之二叉樹詳情

 更新時(shí)間:2022年05月07日 10:38:14   作者:宇宙之一粟  
這篇文章主要介紹了?Go?數(shù)據(jù)結(jié)構(gòu)之二叉樹詳情,二叉樹是一種數(shù)據(jù)結(jié)構(gòu),在每個(gè)節(jié)點(diǎn)下面最多存在兩個(gè)其他節(jié)點(diǎn)。即一個(gè)節(jié)點(diǎn)要么連接至一個(gè)、兩個(gè)節(jié)點(diǎn)或不連接其他節(jié)點(diǎn),下文基于GO語(yǔ)言展開二叉樹結(jié)構(gòu)詳情,需要的朋友可以參考一下

前言:

樹可以有許多不同的形狀,并且它們可以在每個(gè)節(jié)點(diǎn)允許的子節(jié)點(diǎn)數(shù)量或它們?cè)诠?jié)點(diǎn)內(nèi)組織數(shù)據(jù)值的方式上有所不同。 而在其中最常用的樹之一是二叉樹。 二叉樹是一棵樹,其中每個(gè)節(jié)點(diǎn)最多可以有兩個(gè)孩子。 一個(gè)孩子被識(shí)別為左孩子,另一個(gè)孩子被識(shí)別為右孩子。

二叉樹是一種數(shù)據(jù)結(jié)構(gòu),在每個(gè)節(jié)點(diǎn)下面最多存在兩個(gè)其他節(jié)點(diǎn)。即一個(gè)節(jié)點(diǎn)要么連接至一個(gè)、兩個(gè)節(jié)點(diǎn)或不連接其他節(jié)點(diǎn)。

樹形結(jié)構(gòu)的深度(也被稱作高度)則被定義為根節(jié)點(diǎn)為根節(jié)點(diǎn)至某個(gè)節(jié)點(diǎn)間的最長(zhǎng)路徑,而節(jié)點(diǎn)的深度則表示當(dāng)當(dāng)前節(jié)點(diǎn)至樹根節(jié)點(diǎn)間的邊數(shù)。二叉樹有許多不同的形狀和大小。 形狀取決于節(jié)點(diǎn)的數(shù)量和節(jié)點(diǎn)的鏈接方式。

下圖說明了由九個(gè)節(jié)點(diǎn)組成的二叉樹的三種不同形狀:

Go 語(yǔ)言實(shí)現(xiàn)二叉樹

定義二叉樹的結(jié)構(gòu)

package main
import (
"fmt"
"math/rand"
"time"
)
type Tree struct {
Left *Tree
Value int
Right *Tree
}

二叉樹遍歷

func traverse(t *Tree) {
if t == nil {
return
}
traverse(t.Left)
fmt.Print(t.Value, " ")
traverse(t.Right)
}

traverse()函數(shù)通過遞歸方式訪問二叉樹的全部節(jié)點(diǎn)。

創(chuàng)建二叉樹

利用create()函數(shù)利用隨機(jī)整數(shù)填寫二叉樹:

func create(n int) *Tree {
var t *Tree
rand.Seed(time.Now().Unix())
for i := 0; i < 2 * n; i++ {
temp := rand.Intn(n * 2)
t = insert(t, temp)
}
return t
}

插入值

insert 函數(shù):

  • 第一個(gè) if 語(yǔ)句在插入時(shí)如果是空樹,就把插入的節(jié)點(diǎn)設(shè)置為根節(jié)點(diǎn),并創(chuàng)建為 &Tree{nil, v, nil}
  • 第二個(gè) if 語(yǔ)句確定插入值是否已在二叉樹中存在。若存在,函數(shù)將直接返回且不執(zhí)行任何操作
  • 第三個(gè) if 語(yǔ)句檢查插入的值位于當(dāng)前節(jié)點(diǎn)的左孩子節(jié)點(diǎn)還是右孩子節(jié)點(diǎn),并插入到相應(yīng)的位置。
func insert(t *Tree, v int) *Tree {
if t == nil {
return &Tree{nil, v, nil}
}
if v == t.Value {
return t
}
if v < t.Value {
t.Left = insert(t.Left, v)
return t
}
t.Right = insert(t.Right, v)
return t
}

測(cè)試

package main
import (
"fmt"
"math/rand"
"time"
)
type Tree struct {
Left *Tree
Value int
Right *Tree
}
func traverse(t *Tree) {
if t == nil {
return
}
traverse(t.Left)
fmt.Print(t.Value, " ")
traverse(t.Right)
}
func create(n int) *Tree {
var t *Tree
rand.Seed(time.Now().Unix())
for i := 0; i < 2*n; i++ {
temp := rand.Intn(n * 2)
t = insert(t, temp)
}
return t
}
func insert(t *Tree, v int) *Tree {
if t == nil {
return &Tree{nil, v, nil}
}
if v == t.Value {
return t
}
if v < t.Value {
t.Left = insert(t.Left, v)
return t
}
t.Right = insert(t.Right, v)
return t
}
func main() {
tree := create(10)
fmt.Println("The value of the root of the tree is", tree.Value)
traverse(tree)
fmt.Println()
tree = insert(tree, -10)
tree = insert(tree, -2)
traverse(tree)
fmt.Println()
fmt.Println("The value of the boot of the the tree is", tree.Value)
}

運(yùn)行結(jié)果:

The value of the root of the tree is 18
0 1 4 5 6 8 9 10 12 14 15 18 19
-10 -2 0 1 4 5 6 8 9 10 12 14 15 18 19
The value of the boot of the the tree is 18

到此這篇關(guān)于 Go 數(shù)據(jù)結(jié)構(gòu)之二叉樹詳情的文章就介紹到這了,更多相關(guān) Go 二叉樹內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang簡(jiǎn)單tls協(xié)議用法完整示例

    golang簡(jiǎn)單tls協(xié)議用法完整示例

    這篇文章主要介紹了golang簡(jiǎn)單tls用法,分析了tls協(xié)議的使用步驟及客戶端與服務(wù)器端的相關(guān)實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-07-07
  • Go常用標(biāo)準(zhǔn)庫(kù)之fmt的簡(jiǎn)介與使用詳解

    Go常用標(biāo)準(zhǔn)庫(kù)之fmt的簡(jiǎn)介與使用詳解

    fmt 是 Go 語(yǔ)言中的一個(gè)常用標(biāo)準(zhǔn)庫(kù),它用于格式化輸入和輸出數(shù)據(jù),這篇文章主要為大家介紹了fmt的基本使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Go空結(jié)構(gòu)體struct{}的作用是什么

    Go空結(jié)構(gòu)體struct{}的作用是什么

    本文主要介紹了Go空結(jié)構(gòu)體struct{}的作用是什么,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 淺析Go語(yǔ)言中的Range關(guān)鍵字

    淺析Go語(yǔ)言中的Range關(guān)鍵字

    Range是go語(yǔ)言中很獨(dú)特的一個(gè)關(guān)鍵詞,也相當(dāng)好用。下面就跟著小編來再聊聊這個(gè)Range關(guān)鍵字,有需要的朋友們可以參考借鑒。
    2016-09-09
  • Golang中interface是引用類型的原因解析

    Golang中interface是引用類型的原因解析

    在Go語(yǔ)言中,將interface設(shè)計(jì)為引用類型是為了實(shí)現(xiàn)更靈活、更動(dòng)態(tài)的類型系統(tǒng),這篇文章主要介紹了深度解析Golang中為什么interface是引用類型,需要的朋友可以參考下
    2024-01-01
  • 詳解Go語(yǔ)言如何使用xorm實(shí)現(xiàn)讀取mysql

    詳解Go語(yǔ)言如何使用xorm實(shí)現(xiàn)讀取mysql

    xorm是go語(yǔ)言的常用orm之一,可以用來操作數(shù)據(jù)庫(kù)。本文就來和大家聊聊Go語(yǔ)言如何使用xorm實(shí)現(xiàn)讀取mysql功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-11-11
  • 初步解讀Golang中的接口相關(guān)編寫方法

    初步解讀Golang中的接口相關(guān)編寫方法

    這篇文章主要介紹了Golang中的接口相關(guān)編寫方法,是Go語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • Go語(yǔ)言的Windows下環(huán)境配置以及簡(jiǎn)單的程序結(jié)構(gòu)講解

    Go語(yǔ)言的Windows下環(huán)境配置以及簡(jiǎn)單的程序結(jié)構(gòu)講解

    這篇文章主要介紹了Go語(yǔ)言的Windows下環(huán)境配置以及簡(jiǎn)單的程序結(jié)構(gòu)講解,從編程語(yǔ)言約定俗成的hellow world開始,需要的朋友可以參考下
    2015-10-10
  • 詳解Go語(yǔ)言RESTful JSON API創(chuàng)建

    詳解Go語(yǔ)言RESTful JSON API創(chuàng)建

    這篇文章主要介紹了詳解Go語(yǔ)言RESTful JSON API創(chuàng)建,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Go語(yǔ)言之init函數(shù)

    Go語(yǔ)言之init函數(shù)

    Go語(yǔ)言有一個(gè)特殊的函數(shù)init,先于main函數(shù)執(zhí)行,實(shí)現(xiàn)包級(jí)別的一些初始化操作。這篇文章介紹了Go中的Init函數(shù),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評(píng)論