麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Swift > 正文

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

2020-03-09 17:45:29
字體:
供稿:網(wǎng)友

一、概述

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

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

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

以下面二叉樹為例:

swift,二叉樹,二叉樹算法,排序算法

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

swift,二叉樹,二叉樹算法,排序算法

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

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

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

swift,二叉樹,二叉樹算法,排序算法

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

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

swift,二叉樹,二叉樹算法,排序算法

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

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

swift,二叉樹,二叉樹算法,排序算法

故上面先序遍歷的順序為: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) }  }

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者使用swift/80097.html">swift能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到swift教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 美国黄色毛片女人性生活片 | 午夜精品福利视频 | 在线小视频国产 | 久久狂草 | 日本xxxx视频 | 精品黑人一区二区三区国语馆 | 91精品久久香蕉国产线看观看 | 黄色网址在线视频 | 成年人在线免费播放视频 | 小雪奶水翁胀公吸小说最新章节 | 日本一级黄色毛片 | 国产精品观看在线亚洲人成网 | 欧美久久一区二区 | 日韩视频一区在线 | 午夜视频观看 | 欧美一级美国一级 | 精品国产乱码一区二区三区四区 | 亚洲综合色视频在线观看 | 日韩.www | videos高潮| 韩国一大片a毛片 | 久久精品99北条麻妃 | 国产成人av一区 | 网站毛片| 久久精品爱 | 久久久av亚洲男天堂 | 久久精品一区二区三区四区五区 | 国产一级一片免费播放 | 久久影院一区二区三区 | 欧美一级视频网站 | 久久久久久久黄色片 | 爽成人777777婷婷 | 欧美日韩在线播放一区 | 91久久久久久久久久久久久 | 国产刺激高潮av | 国产一级在线观看视频 | 羞羞的视频免费在线观看 | 叶子楣成人爽a毛片免费啪啪 | av亚洲在线观看 | 在线成人免费av | 国产精品久久久久久久久久大牛 |