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

Swift算法之二叉樹實(shí)現(xiàn)的方法示例

 更新時(shí)間:2017年03月31日 10:21:21   作者:李峰峰  
二叉樹是計(jì)算機(jī)科學(xué)中最基本也是最重要的樹型結(jié)構(gòu),最常見(jiàn)的二叉樹生成算法通常是使用遞歸或者其他描述類語(yǔ)言的方法來(lái)實(shí)現(xiàn)。本文主要介紹了Swift算法之二叉樹實(shí)現(xiàn)的方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。

一、概述

二叉樹的結(jié)構(gòu)一般是以二叉鏈表的形式來(lái)存儲(chǔ)的。二叉鏈表的結(jié)構(gòu)類似于雙向鏈表,二叉鏈表的節(jié)點(diǎn)也是有兩個(gè)結(jié)點(diǎn)指針的,一個(gè)指向左子樹,一個(gè)指向右子樹。二叉樹主要有四種遍歷方式:先序遍歷、中序遍歷、后序遍歷、層次遍歷。關(guān)于二叉樹的內(nèi)容網(wǎng)上有很多,這里不再做過(guò)多的陳述。

本文將用Swift去實(shí)現(xiàn)二叉樹的創(chuàng)建、四種遍歷方式等。下面的實(shí)現(xiàn)部分內(nèi)容參考了青玉伏案和唐巧兩位大神相關(guān)的文章。

二、實(shí)現(xiàn)思路及代碼

以下面二叉樹為例:

先序遍歷:先遍歷根節(jié)點(diǎn)然后再遍歷左子樹,最后遍歷右子樹。

故上面先序遍歷的順序?yàn)椋?A B D E C F

不過(guò)為了看到更詳細(xì)的步驟可以把上面 C 結(jié)點(diǎn)的左子節(jié)點(diǎn)的 value 值打印為#號(hào),類似的D、E、F也一樣,他們的左右子節(jié)點(diǎn)的 value 值都打印為#號(hào),則打印結(jié)果為:A B D # # E # # C # F # #

中序遍歷:先遍歷左子樹,然后遍歷根節(jié)點(diǎn),最后遍歷右子樹。

故上面先序遍歷的順序?yàn)椋? D # B # E # A # C # F #

后序遍歷:后序遍歷是先遍歷左子樹,然后再遍歷右子樹,最后遍歷根節(jié)點(diǎn)

故上面先序遍歷的順序?yàn)椋? # D # # E B # # # F C A

層次遍歷:層次遍歷相對(duì)上面的幾個(gè)遍歷實(shí)現(xiàn)起來(lái)要稍微復(fù)雜,層次遍歷就是圖中以二叉樹的根節(jié)點(diǎn)為起始節(jié)點(diǎn)的廣度搜索(BFS)

故上面先序遍歷的順序?yàn)椋篈 B C D E # F # # # # # #

下面為上述幾種遍歷的Swift實(shí)現(xiàn):

class BinaryTreeNote{
 
 var value:String
 var leftChild:BinaryTreeNote?
 var rightChild:BinaryTreeNote?
 
 init(_ value:String) {
 self.value = value
 }
 
}
 
 
class BinaryTreeHelper{
 
 var array:[String]
 var index = -1
 
 init(_ array:[String]) {
 self.array = array
 }
 
 //創(chuàng)建二叉樹
 func createTree() -> BinaryTreeNote? {
 
 self.index = self.index + 1
 if index < self.array.count && index >= 0 {
 
  let value = self.array[index]
  
  if value == "" {
  return nil
  } else {
  let note = BinaryTreeNote(value)
  note.leftChild = createTree()
  note.rightChild = createTree()
  return note
  }
 }
 return nil;
 }
 
 //先序遍歷二叉樹
 func preOrderTraverse(_ note:BinaryTreeNote?){
 
 if note == nil {
  print("#")
  return
 }
 print(note!.value)
 preOrderTraverse(note!.leftChild)
 preOrderTraverse(note!.rightChild)
 }
 
 //中序遍歷二叉樹
 func inOrderTraverse (_ note: BinaryTreeNote?) {
 if note == nil {
  print("#")
  return
 }
 inOrderTraverse(note!.leftChild)
 print(note!.value)
 inOrderTraverse(note!.rightChild)
 }
 
 //后序遍歷二叉樹
 func afterOrderTraverse (_ note: BinaryTreeNote?) {
 if note == nil {
  print("#")
  return
 }
 afterOrderTraverse(note!.leftChild)
 afterOrderTraverse(note!.rightChild)
 print(note!.value)
 }
 
 //層次遍歷二叉樹
 func levelOrder(_ root: BinaryTreeNote?){
 
 var result = [[BinaryTreeNote]]()
 var level = [BinaryTreeNote]()
 
 level.append(root!)
 while level.count != 0 {
  result.append(level)
  var nextLevel = [BinaryTreeNote]()
  for node in level {
  if let leftNode = node.leftChild {
   nextLevel.append(leftNode)
  }
  if let rightNode = node.rightChild {
   nextLevel.append(rightNode)
  }
  }
  level = nextLevel
 }
 
 let ans = result.map { $0.map { $0.value }}
 print(ans)
 }
 
 
}

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者使用swift能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • mac git xcrun error active developer path 錯(cuò)誤

    mac git xcrun error active developer path 錯(cuò)誤

    本文主要是講訴了如何解決在mac下使用git;xcode4.6的環(huán)境時(shí),出現(xiàn)了錯(cuò)誤(mac git xcrun error active developer path)的解決辦法,希望對(duì)大家有所幫助
    2014-09-09
  • 純swift實(shí)現(xiàn)ipad版簡(jiǎn)單美團(tuán)界面功能

    純swift實(shí)現(xiàn)ipad版簡(jiǎn)單美團(tuán)界面功能

    這篇文章主要為大家詳細(xì)介紹了純swift實(shí)現(xiàn)ipad版簡(jiǎn)單美團(tuán)界面功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 詳談swift內(nèi)存管理中的引用計(jì)數(shù)

    詳談swift內(nèi)存管理中的引用計(jì)數(shù)

    下面小編就為大家?guī)?lái)一篇詳談swift內(nèi)存管理中的引用計(jì)數(shù)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Swift教程之方法詳解

    Swift教程之方法詳解

    這篇文章主要介紹了Swift教程之方法詳解,方法是關(guān)聯(lián)到一個(gè)特定類型的函數(shù),類、結(jié)構(gòu)、枚舉所有可以定義實(shí)例方法,封裝特定任務(wù)和功能處理給定類型的一個(gè)實(shí)例,需要的朋友可以參考下
    2015-01-01
  • 用SwiftUI實(shí)現(xiàn)3D Scroll滾動(dòng)效果的實(shí)現(xiàn)代碼

    用SwiftUI實(shí)現(xiàn)3D Scroll滾動(dòng)效果的實(shí)現(xiàn)代碼

    這篇文章主要介紹了用SwiftUI實(shí)現(xiàn)3D Scroll效果的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)
    2020-04-04
  • Compose聲明式代碼語(yǔ)法對(duì)比React?Flutter?SwiftUI

    Compose聲明式代碼語(yǔ)法對(duì)比React?Flutter?SwiftUI

    這篇文章主要為大家介紹了Compose聲明式代碼語(yǔ)法對(duì)比React?Flutter?SwiftUI來(lái)解釋為什么說(shuō)?Compose?的聲明式代碼最簡(jiǎn)潔,有需要的朋友可以借鑒參考下
    2022-08-08
  • SwiftUI自定義導(dǎo)航的方法實(shí)例

    SwiftUI自定義導(dǎo)航的方法實(shí)例

    導(dǎo)航是我們平時(shí)經(jīng)常會(huì)遇到的一個(gè)需求,下面這篇文章主要給大家介紹了關(guān)于SwiftUI自定義導(dǎo)航的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 深入解析Swift編程中枚舉類型的相關(guān)使用

    深入解析Swift編程中枚舉類型的相關(guān)使用

    這篇文章主要介紹了Swift編程中枚舉類型的相關(guān)使用,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • 深入理解Swift中的訪問(wèn)控制關(guān)鍵字

    深入理解Swift中的訪問(wèn)控制關(guān)鍵字

    這篇文章主要給大家介紹了Swift中訪問(wèn)控制關(guān)鍵字的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • Swift仿微信語(yǔ)音通話最小化時(shí)后的效果實(shí)例代碼

    Swift仿微信語(yǔ)音通話最小化時(shí)后的效果實(shí)例代碼

    這篇文章主要介紹了Swift仿微信語(yǔ)音通話最小化時(shí)后的效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論