久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Swift算法之二叉樹實現的方法示例

二叉樹是計算機科學中最基本也是最重要的樹型結構,最常見的二叉樹生成算法通常是使用遞歸或者其他描述類語言的方法來實現。本文主要介紹了Swift算法之二叉樹實現的方法,文中介

一、概述

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

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

二、實現思路及代碼

以下面二叉樹為例:

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

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

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

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

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

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

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

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

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

下面為上述幾種遍歷的Swift實現:


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
 }
 
 //創建二叉樹
 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)
 }
 
 
}

總結

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

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

這篇文章主要給大家介紹了關于RxSwift學習教程之類型對象Subject的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關于RxSwift學習教程之Observable的相關資料,文中詳細的給大家介紹了關于新建Observable、訂閱Observable和取消訂閱并消除內存泄漏等相關的內容,需要的朋友可以
RxSwift是Swift函數響應式編程的一個開源庫,由Github的ReactiveX組織開發,維護。下面這篇文章主要給大家介紹了關于RxSwift學習之基礎篇的相關資料,文中通過示例代碼介紹的非常詳細,需
這篇文章主要為大家詳細介紹了Swift4.0 Array數組的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
CATransition動畫主要在過渡時使用,比如兩個頁面層級改變的時候添加一個轉場效果。CATransition分為兩類,一類是公開的動畫效果,一類是非公開的動畫效果。這篇文章主要給大家介紹了
近日,iPhone X的發布在人們群眾引起了很大的轟動,下面這篇文章主要給大家介紹了關于利用Swift如何判斷iPhone X機型的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面
主站蜘蛛池模板: 欧美视频免费 | 亚洲成人精品 | 九九热国产视频 | 91天堂网| 91国内精品久久 | 久久久国产精品 | 91久久久www播放日本观看 | av日韩精品 | 精品国产综合 | 国产一区久久 | 五月婷婷激情网 | 欧美一级二级在线观看 | 国产精品久久久久久久午夜片 | 国产欧美精品 | 欧美精品三区 | 粉嫩高清一区二区三区 | 国产一区二区三区免费观看视频 | 中文字幕第二十页 | 亚洲天堂二区 | 久久久精| 国产伦一区二区三区四区 | 亚洲国产一区在线 | 男人天堂久久 | 亚洲国产精品久久久久婷婷老年 | 91 在线| 久久免费视频在线 | 日韩精品在线一区 | 欧美一级做性受免费大片免费 | 久久狠狠| 久久91| 国产一区二区三区四区区 | 久久精品在线 | 国产一区二区三区 | 精品久久久av | 日本免费一区二区三区四区 | 黄色成人在线观看 | www.国产日本 | 四虎成人在线播放 | 精品久久久久久久久久久 | 四虎影院久久 | 亚洲国产精品久久久久秋霞不卡 |