日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久你懂的 | 九色91丨porny丨丝袜 | 亚洲精品视频在线播放 | 人妻视频一区 | 久久影院午夜理论片无码 | 香蕉视频免费在线播放 | 国产精品亚州 | 久久激情网 | 亚洲精品国产乱伦 | 高潮网址 | 丁香花在线影院观看在线播放 | 俄罗斯精品一区二区三区 | 日本中文视频 | 91黑丝视频 | 精品在线视频一区二区三区 | 麻豆91在线播放 | 国产又色又爽无遮挡免费动态图 | 中文日韩字幕 | 91亚洲国产成人久久精品网站 | 黄色免费网站在线看 | 欧美不卡一区二区三区 | 三级网站免费看 | 中文字幕日韩在线播放 | 日本欧美一区二区三区 | 黄网免费在线观看 | 麻豆三级视频 | 欧美一区二区三区大屁股撅起来 | 殴美黄色大片 | 免费成人在线观看动漫 | 国产在线一区二区三区 | 福利视频免费看 | 成人依人 | 在线观看国产黄 | 一区二区三区久久精品 | 香蕉视频网站在线 | 51成人做爰www免费看网站 | 欧美成年人视频在线观看 | 在线se| 91av亚洲| 成人免费一区二区三区 | 久操热 | 久久精品欧美一区二区 | 蜜桃av影视 | 奇米久久 | а√天堂资源在线 | 日本一区二区三区网站 | 国产 一二三四五六 | 免费av中文字幕 | av一区二区免费 | 人妻aⅴ无码一区二区三区 阿v免费视频 | 亚洲综合网在线观看 | av免费精品 | 国产精品影音先锋 | 国产污片在线观看 | 亚洲精品动漫在线观看 | 中文字幕免费高 | 久草综合在线 | www.五月天婷婷.com | 欧美一极片 | 亚洲www久久久 | 国产精品高潮呻吟久久av野狼 | 亚洲精品粉嫩小泬 | 桃色成人网 | 色黄视频 | 久久天堂精品 | 国产视频高清 | 日韩一区二区高清视频 | 天天综合网天天综合色 | 欧美久久综合网 | av网站在线免费看 | 亚洲乱码电影 | 国产乱人乱精一区二视频国产精品 | 黄色成人av在线 | 波多野结衣影院 | 国产成人精品一区二区三 | 亚洲国产综合网 | 国产真人做爰视频免费 | 你懂的视频网站 | 国产福利免费视频 | 亚洲高清资源 | 日日爽夜夜操 | 91网站永久免费看nba视频 | 中文字幕观看视频 | 国产精选久久久 | 日韩欧美视频在线播放 | 玖玖久久 | 最近国语视频在线观看免费播放 | 最新国产三级 | 日韩综合中文字幕 | 乌克兰极品av女神 | 国产剧情精品 | 亚洲青青草原 | 国产精品久久亚洲 | 一道本在线视频 | www.一起操 | 欧美性视频网站 | 91麻豆网 | 黄色靠逼视频 | 久草成人在线 |