pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

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機型的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面
主站蜘蛛池模板: 风信子发稿-专注为企业提供全球新闻稿发布服务 | 有声小说,听书,听小说资源库-听世界网 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 危废处理系统,水泥厂DCS集散控制系统,石灰窑设备自动化控制系统-淄博正展工控设备 | 塑胶跑道施工-硅pu篮球场施工-塑胶网球场建造-丙烯酸球场材料厂家-奥茵 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 雷达液位计_超声波风速风向仪_雨量传感器_辐射传感器-山东风途物联网 | 上海佳武自动化科技有限公司 | 订做不锈钢_不锈钢定做加工厂_不锈钢非标定制-重庆侨峰金属加工厂 | 小型气象站_便携式自动气象站_校园气象站-竞道气象设备网 | 广州印刷厂_广州彩印厂-广州艺彩印务有限公司 | 立式_复合式_壁挂式智能化电伴热洗眼器-上海达傲洗眼器生产厂家 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 一级建造师培训_一建培训机构_中建云筑建造师培训网校 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 上海阳光泵业制造有限公司 -【官方网站】 | 天津中都白癜风医院_天津白癜风医院_天津治疗白癜风 | 彼得逊采泥器-定深式采泥器-电动土壤采样器-土壤样品风干机-常州索奥仪器制造有限公司 | 紫外线老化试验箱_uv紫外线老化试验箱价格|型号|厂家-正航仪器设备 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 华中线缆有限公司-电缆厂|电缆厂家|电线电缆厂家| 高压绝缘垫-红色配电房绝缘垫-绿色高压绝缘地毯-上海苏海电气 | 超声波清洗机_超声波清洗机设备_超声波清洗机厂家_鼎泰恒胜 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 氢氧化钾厂家直销批发-济南金昊化工有限公司 | 校服厂家,英伦校服定做工厂,园服生产定制厂商-东莞市艾咪天使校服 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 棉服定制/厂家/公司_棉袄订做/价格/费用-北京圣达信棉服 | 西门子伺服电机维修,西门子电源模块维修,西门子驱动模块维修-上海渠利 | 首页-恒温恒湿试验箱_恒温恒湿箱_高低温试验箱_高低温交变湿热试验箱_苏州正合 | 断桥铝破碎机_铝合金破碎机_废铁金属破碎机-河南鑫世昌机械制造有限公司 | 货车视频监控,油管家,货车油管家-淄博世纪锐行电子科技 | 药品/药物稳定性试验考察箱-埃里森仪器设备(上海)有限公司 | 低噪声电流前置放大器-SR570电流前置放大器-深圳市嘉士达精密仪器有限公司 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 防火门-专业生产甲级不锈钢钢质防火门厂家资质齐全-广东恒磊安防设备有限公司 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 礼至家居-全屋定制家具_一站式全屋整装_免费量房设计报价 |