日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Swift-binary search tree

發布時間:2024/4/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Swift-binary search tree 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
class BinarySearchTree<T:Comparable> {private(set) var value:Tprivate(set) var parent:BinarySearchTree?private(set) var leftChild:BinarySearchTree?private(set) var rightChild:BinarySearchTree?public init(value: T) {self.value = value}public convenience init(array: [T]) {// 將數組的第一個值賦給root,數組其他的值直接插入到binarySearchTree中// precondition use as assertprecondition(array.count > 0)self.init(value: array.first!)// array.dropFirst()// A subsequence starting after the first element of the sequence.for value in array.dropFirst() {insert(value: value)}}public var isRoot: Bool {return parent == nil}public var isLeftChild: Bool {return parent?.leftChild === self}public var isRightChild: Bool {return parent?.rightChild === self}public var isChild: Bool {return isLeftChild || isRightChild}public var hasLeftChild: Bool {return leftChild != nil}public var hasRightChild: Bool {return rightChild != nil}public var isLeaf: Bool {return (leftChild == nil) && (rightChild == nil)}public var hasAnyChild: Bool {return hasLeftChild || hasRightChild}public var count: Int {return (leftChild?.count ?? 0) + 1 + (rightChild?.count ?? 0)}public func insert(value: T) {if value == self.value {return}if value < self.value {if let left = self.leftChild {left.insert(value: value)} else {self.leftChild = BinarySearchTree(value: value)self.leftChild?.parent = self}} else {if let right = self.rightChild {right.insert(value: value)} else {self.rightChild = BinarySearchTree(value: value)self.rightChild?.parent = self}}}public func search(value: T) -> BinarySearchTree? {if value < self.value {return self.leftChild?.search(value: value)} else if value > self.value {return self.rightChild?.search(value: value)} else {return self}}public func traverseInOrder(process: (T) -> Void) {leftChild?.traverseInOrder(process: process)process(value)rightChild?.traverseInOrder(process: process)}public func traversePreOrder(process: (T) -> Void) {process(value)leftChild?.traversePreOrder(process: process)rightChild?.traversePreOrder(process: process)}public func traversePostOrder(process: (T) -> Void) {leftChild?.traversePostOrder(process: process)rightChild?.traversePostOrder(process: process)process(value)}public func minValue() -> BinarySearchTree {var node = selfwhile let next = node.leftChild {node = next}return node}public func maxValue() -> BinarySearchTree {var node = selfwhile let next = node.rightChild {node = next}return node}// height高度是當前節點到葉子結點的最大距離public func height() -> Int {if isLeaf {return 0} else {return 1 + max(self.leftChild?.height() ?? 0, self.rightChild?.height() ?? 0 )}}// depth 深度是當前到根結點的距離public func depth() -> Int {var node = selfvar edges = 0while let parent = node.parent {node = parentedges += 1}return edges}// precede the current value in sorted orderpublic func predecessor() -> BinarySearchTree<T>? {if let left = self.leftChild {return left.maxValue()} else {var node = selfwhile let parent = node.parent {if node.isRightChild {return parent} else {node = parent}}}return nil}public func successor() -> BinarySearchTree<T>? {if let right = self.rightChild {return right.minValue()} else {var node = selfwhile let parent = node.parent {if node.isLeftChild {return parent} else {node = parent}}}return nil}

?  //判斷插入一個值后當前是否還是BST

? ? public func isBST(min:T, max:T) -> Bool {

? ? ? ? if value < min || value > max {

? ? ? ? ? ? return false

? ? ? ? }

? ? ? ? let leftBST = self.leftChild?.isBST(min: min, max: value) ?? true

? ? ? ? let rightBST = self.rightChild?.isBST(min: value, max: max) ?? true

?? ? ? ?

? ? ? ? return leftBST && rightBST

? ? }

private func reconnectParentToNode(node: BinarySearchTree?) {if let parent = self.parent {if isLeftChild {parent.leftChild = node} else {parent.rightChild = node}}node?.parent = self.parent} }extension BinarySearchTree:CustomStringConvertible {var description: String {var text = "\(value): {"if leftChild != nil {text += "{ left: " + (leftChild?.description)! + "}"}if rightChild != nil {text += "{ right: " + (rightChild?.description)! + "}"}text += "}"return text} }

測試:

let bst = BinarySearchTree<Int>(value: 5) bst.insert(value: 3) bst.insert(value: 8) bst.insert(value: 1) bst.insert(value: 9) bst.insert(value: 4) print(bst)let bstTwo = BinarySearchTree<Int>(array: [5, 3, 8, 1, 9, 4]) print(bstTwo)bstTwo.search(value: 1) bstTwo.search(value: 6)print("PreOrder") bstTwo.traversePreOrder{value in print(value)} print("InOrder") bstTwo.traverseInOrder{value in print(value)} print("PostOrder") bstTwo.traversePostOrder{value in print(value)}bstTwo.minValue() bstTwo.maxValue()bstTwo.height()bstTwo.search(value: 9)?.depth() bstTwo.search(value: 8)?.predecessor() bstTwo.search(value: 4)?.successor()

bstTwo.search(value: 4)?.insert(value: 10)

bstTwo.isBST(min: Int.min, max: Int.max) ?// false

?

轉載于:https://www.cnblogs.com/HackHer/p/8529540.html

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的Swift-binary search tree的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩精品在线免费观看视频 | 国产又黄又猛的视频 | 国产调教在线观看 | 96亚洲精品久久久蜜桃 | 情侣在线视频 | 超碰91人人 | 日韩中文无 | 真人毛片视频 | 五月婷婷六月天 | 超碰96在线 | 久久久亚洲成人 | 精品综合在线 | 91九色在线观看 | 天天干夜夜操 | 国产精品23p | 亚洲第一视频网 | 色老板av | 人人妻人人澡人人爽精品 | 美女免费黄视频 | 永久中文字幕 | 亚洲国产精品无码久久久久高潮 | 淫僧荡尼巨乳(h)小说 | 天堂av观看 | 天堂av在线中文 | 91福利一区二区 | 嫩草私人影院 | 理论片大全免费理伦片 | 污污网站在线观看视频 | 国产一级片播放 | 久久综合狠狠综合久久综合88 | 久久夜视频 | 锕锕锕锕锕锕锕锕 | 18成人免费观看网站下载 | 精品黑人一区二区三区观看时间 | 亚洲涩涩在线 | 国产精品天美传媒沈樵 | 四川话毛片少妇免费看 | 欧美精品一区二区三 | 久久国产网站 | 色爱亚洲 | 欧美视频在线观看 | 免费在线观看日韩av | 女性高潮视频 | 人人玩人人弄 | 密臀av在线 | 精品久久国产视频 | 精品久久免费视频 | 国产黄色在线 | 欧美大浪妇猛交饥渴大叫 | 久久疯狂做爰流白浆xx | 欧美午夜精品久久久久久蜜 | 亚洲一级影院 | 亚洲精品成人网 | 99热国产在线观看 | 91啪国产 | 在线观看免费日韩av | 高潮毛片无遮挡 | 久久不射影院 | 亚洲午夜精品 | 国内免费av | 久久精品国产亚洲AV熟女 | 天天操网 | 精品动漫一区二区三区的观看方式 | 亚洲激情成人网 | 中国女人内精69xxxxxx | 公交顶臀绿裙妇女配视频 | 免费久久av| 97av在线播放| 热久久精品免费视频 | 91性视频 | 黄色片视频在线观看 | 日韩伊人网 | av老司机在线 | 亚洲色图50p | tube极品少妇videos | 国产精品自拍视频 | 国产女教师一区二区三区 | 91欧美激情一区二区三区成人 | 亚洲人成电影在线播放 | 午夜影院在线视频 | 成人免费福利 | 青青青在线视频观看 | av免费看网址| 亚洲AV无码一区二区三区蜜桃 | 国产日韩欧美视频在线观看 | 九九九九九九精品 | 国产熟妇乱xxxxx大屁股网 | 成人xxx | 中文精品在线观看 | 农村妇女精品一区二区 | 国产裸体永久免费无遮挡 | 亚洲伦理一区 | 九九热精品在线观看 | 天堂а在线中文在线新版 | 麻豆成人在线 | 久久96 | www.youjizz.com久久| 久久久久久久一区 | 69精品无码成人久久久久久 |