最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、概述

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

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

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

以下面二叉樹為例:

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

故上面先序遍歷的順序為: A B D E C F

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

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

故上面先序遍歷的順序為:# D # B # E # A # C # F #

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

故上面先序遍歷的順序為:# # D # # E B # # # F C A

層次遍歷:層次遍歷相對上面的幾個遍歷實現(xiàn)起來要稍微復雜,層次遍歷就是圖中以二叉樹的根節(jié)點為起始節(jié)點的廣度搜索(BFS)

故上面先序遍歷的順序為:A B C D E # F # # # # # #

下面為上述幾種遍歷的Swift實現(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)
 }
 
 
}

總結

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

相關文章

  • 程序遷移到swift 3.0的一些實用技巧

    程序遷移到swift 3.0的一些實用技巧

    Swift項目為適配iOS10,無奈只能更新Xcode 8 ,可是發(fā)現(xiàn)一入3.0深似海,從此幸福是路人。于是邊摸索邊修改,終于完成了代碼遷移。節(jié)后在完成手頭工作后,整理思路把Swift3.0遷移的一些實用技巧分享大家,需要的朋友可以參考下。
    2017-03-03
  • 深入解析Swift編程中的構造方法

    深入解析Swift編程中的構造方法

    先進的Swfit語言同樣具有構造方法,構造方法在對象被創(chuàng)建后會首先被調(diào)用,這里我們就來深入解析Swift編程中的構造方法:
    2016-07-07
  • 通過示例分析Swift單例模式

    通過示例分析Swift單例模式

    這篇文章主要介紹了通過示例分析Swift單例模式的三種方法,分別是全局變量,內(nèi)部變量,dispatch_once方式,有需要的小伙伴可以參考下。
    2015-06-06
  • Swift?enum枚舉類型使用詳解

    Swift?enum枚舉類型使用詳解

    這篇文章主要為大家介紹了Swift?enum枚舉類型的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • swift表格控件使用方法詳解(UITableview)

    swift表格控件使用方法詳解(UITableview)

    這篇文章主要為大家詳細介紹了swift表格控件的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 詳解Swift中的函數(shù)及函數(shù)閉包使用

    詳解Swift中的函數(shù)及函數(shù)閉包使用

    Swift的函數(shù)在創(chuàng)建和調(diào)用時非常簡潔,在編寫具有閉包特性的函數(shù)時同樣也相當方便,以下我們就來詳解Swift中的函數(shù)及函數(shù)閉包使用:
    2016-06-06
  • Swift如何為網(wǎng)頁承載頁面添加更多功能詳解

    Swift如何為網(wǎng)頁承載頁面添加更多功能詳解

    這篇文章主要給大家介紹了關于Swift如何為網(wǎng)頁承載頁面添加更多功能的相關資料,包括添加菊花加載的效果、添加跳轉(zhuǎn)到Safari的功能、添加復制鏈接的功能以及添加分享網(wǎng)頁的功能,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-05-05
  • Swift免費短信驗證碼實現(xiàn)及動態(tài)倒計時功能

    Swift免費短信驗證碼實現(xiàn)及動態(tài)倒計時功能

    這篇文章主要介紹了Swift免費短信驗證碼實現(xiàn)及動態(tài)倒計時功能的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • Swift實現(xiàn)簡單計算器

    Swift實現(xiàn)簡單計算器

    這篇文章主要為大家詳細介紹了Swift實現(xiàn)簡單計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 用SwiftUI實現(xiàn)3D Scroll滾動效果的實現(xiàn)代碼

    用SwiftUI實現(xiàn)3D Scroll滾動效果的實現(xiàn)代碼

    這篇文章主要介紹了用SwiftUI實現(xiàn)3D Scroll效果的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習
    2020-04-04

最新評論

临颍县| 华阴市| 安塞县| 贵州省| 五常市| 弋阳县| 嵩明县| 汝城县| 盘山县| 邯郸县| 重庆市| 永福县| 安泽县| 那坡县| 杭锦后旗| 南澳县| 阿拉善右旗| 安康市| 双峰县| 万全县| 元江| 东安县| 中山市| 绥德县| 江北区| 修文县| 怀集县| 扶绥县| 永丰县| 稻城县| 安塞县| 肇庆市| 兴和县| 吴江市| 临沂市| 石首市| 武宁县| 博乐市| 大庆市| 枣阳市| 蒙自县|