博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Swift]LeetCode653. 两数之和 IV - 输入 BST | Two Sum IV - Input is a BST
阅读量:5096 次
发布时间:2019-06-13

本文共 9541 字,大约阅读时间需要 31 分钟。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝()
➤GitHub地址:
➤原文地址: 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

Given a Binary Search Tree and a target number, return true if there exist two elements in the BST such that their sum is equal to the given target.

Example 1:

Input:     5   / \  3   6 / \   \2   4   7Target = 9Output: True 

Example 2:

Input:     5   / \  3   6 / \   \2   4   7Target = 28Output: False

给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。

案例 1:

输入:     5   / \  3   6 / \   \2   4   7Target = 9输出: True 

案例 2:

输入:     5   / \  3   6 / \   \2   4   7Target = 28输出: False

124ms
1 /** 2  * Definition for a binary tree node. 3  * public class TreeNode { 4  *     public var val: Int 5  *     public var left: TreeNode? 6  *     public var right: TreeNode? 7  *     public init(_ val: Int) { 8  *         self.val = val 9  *         self.left = nil10  *         self.right = nil11  *     }12  * }13  */14 class Solution {15     func findTarget(_ root: TreeNode?, _ k: Int) -> Bool {16         var list = [Int]()17         inorder(root, &list)18         19         var i = 020         var j = list.count - 121         while i < j {22             if list[i] + list[j] == k { return true }23             if list[i] + list[j] < k { i += 1}24             else { j -= 1}25         }26         27         return false28     }29     30     func inorder(_ root: TreeNode?, _ list: inout [Int]) {31         guard let r = root else { return }32         33         inorder(r.left, &list)34         list.append(r.val)35         inorder(r.right, &list)36     }37 }

Runtime: 128 ms
Memory Usage: 20.2 MB
1 /** 2  * Definition for a binary tree node. 3  * public class TreeNode { 4  *     public var val: Int 5  *     public var left: TreeNode? 6  *     public var right: TreeNode? 7  *     public init(_ val: Int) { 8  *         self.val = val 9  *         self.left = nil10  *         self.right = nil11  *     }12  * }13  */14 class Solution {15     func findTarget(_ root: TreeNode?, _ k: Int) -> Bool {16         var set: Set
= []17 var result = false18 func check(_ tree: TreeNode?) -> Bool {19 if tree == nil {
return false}20 let val = tree!.val21 if set.contains(k - val) {22 return true23 }else {24 set.insert(val)25 return check(tree?.left) || check(tree?.right)26 }27 }28 return check(root)29 }30 }

132ms

1 /** 2  * Definition for a binary tree node. 3  * public class TreeNode { 4  *     public var val: Int 5  *     public var left: TreeNode? 6  *     public var right: TreeNode? 7  *     public init(_ val: Int) { 8  *         self.val = val 9  *         self.left = nil10  *         self.right = nil11  *     }12  * }13  */14 class Solution {15     func findTarget(_ root: TreeNode?, _ k: Int) -> Bool {16         var dict = [Int: Int]()17         return traverse(root, k , &dict)18     }19     20     func traverse(_ root: TreeNode?, _ k: Int, _  dict: inout [Int: Int]) -> Bool {21         guard let root = root else { return false }22         let rem = k - root.val23         if dict[rem] != nil {24             return true25         }26         dict[root.val] = 127         return traverse(root.left, k, &dict) || traverse(root.right, k, &dict)28     }29 }

Runtime: 140 ms
Memory Usage: 20.2 MB
1 /** 2  * Definition for a binary tree node. 3  * public class TreeNode { 4  *     public var val: Int 5  *     public var left: TreeNode? 6  *     public var right: TreeNode? 7  *     public init(_ val: Int) { 8  *         self.val = val 9  *         self.left = nil10  *         self.right = nil11  *     }12  * }13  */14 class Solution {15     func findTarget(_ root: TreeNode?, _ k: Int) -> Bool {16         if root == nil {
return false}17 var st:Set
= Set
()18 var q:[TreeNode?] = [root]19 while (!q.isEmpty)20 {21 var t:TreeNode? = q.removeFirst() 22 if st.contains(k - t!.val) {
return true}23 st.insert(t!.val)24 if t?.left != nil {q.append(t!.left)}25 if t?.right != nil {q.append(t!.right)}26 }27 return false28 }29 }

152ms

1 class Solution { 2   var arr : [Int] = [] 3     func findTarget(_ root: TreeNode?, _ k: Int) -> Bool { 4         preOrder(root) 5         var i = 0 6         var j = arr.count - 1 7         while i < j { 8             let sum = arr[i] + arr[j] 9             if sum == k {10                 return true11             } else if sum < k {12                 i += 113             } else {14                 j -= 115             }16         }17         return false18     }19     20     func preOrder(_ root: TreeNode?) {21         if root == nil {
return}22 preOrder(root?.left)23 arr.append(root!.val)24 preOrder(root?.right)25 }26 }

156ms

1 class Solution { 2     func findTarget(_ root: TreeNode?, _ k: Int) -> Bool { 3         var dic = [Int:Int]() 4         return find(root,k, &dic) 5     } 6     func find(_ root: TreeNode?, _ k: Int, _  dic: inout [Int:Int]) -> Bool { 7         if let root = root { 8             let value = k - root.val 9             if dic[value] != nil {10                 return true11             }12             dic[root.val] = root.val13             return find(root.left,k,&dic) || find(root.right,k,&dic)14         } else {15             return false16         }17     }18 }

164ms

1 class Solution { 2      3     var memo : Set
= [] 4 var isSum = false 5 6 func findTarget(_ root: TreeNode?, _ k: Int) -> Bool { 7 guard let node = root else { return false } 8 9 depthFS(node, k)10 return isSum11 }12 13 func depthFS(_ root: TreeNode?,_ k: Int){14 15 guard let node = root else { return }16 17 let complement = k - node.val18 19 if memo.contains(complement){20 isSum = true21 } else {22 memo.insert(node.val)23 }24 25 if let left = node.left{26 findTarget(left, k)27 }28 29 if let right = node.right{30 findTarget(right, k)31 }32 }33 }

172ms

1 class Solution { 2     func findTarget(_ root: TreeNode?, _ k: Int) -> Bool { 3         if root == nil { 4             return false 5         } 6          7         var nodeValueDict = [Int: Int]() 8         var nodeArray = [TreeNode]() 9         nodeArray.append(root!)10         while nodeArray.count > 0 {11             let frontNode = nodeArray[0]12             let diff = k - frontNode.val13             14             if nodeValueDict[diff] != nil {15                 return true16             }17             18             nodeArray.removeFirst()19             nodeValueDict[frontNode.val] = 120             21             if frontNode.left != nil {22                 nodeArray.append(frontNode.left!)23             }24             25             if frontNode.right != nil {26                 nodeArray.append(frontNode.right!)27             }28         }29         30         return false31     }32 }

196ms

1 class Solution { 2     func preorder(_ root: TreeNode?) -> [Int] { 3         if let root: TreeNode = root { 4             return preorder(root.left) + [root.val] + preorder(root.right) 5         } else { 6             return [] 7         } 8     } 9     10     func findTarget(_ root: TreeNode?, _ k: Int) -> Bool {11         var seenVals = Set
()12 13 for val in preorder(root) {14 if seenVals.contains(k - val) {15 return true16 } else {17 seenVals.insert(val)18 }19 }20 21 return false22 }23 }

200ms

1 class Solution { 2     func findTarget(_ root: TreeNode?, _ k: Int) -> Bool { 3         guard let root = root else{ 4             return false 5         } 6         var nSet = Set
() 7 var queue = [TreeNode]() 8 queue.append(root) 9 10 while queue.count > 0{11 let cur = queue.removeFirst()12 nSet.insert(cur.val)13 if let left = cur.left{14 queue.append(left)15 }16 if let right = cur.right{17 queue.append(right)18 }19 }20 for n in Array(nSet){21 if nSet.contains(k - n) && n != (k - n){22 return true23 }24 }25 return false26 }27 }

220ms

1 class Solution { 2      3     var memo : Set
= [] 4 // var isSum = false 5 6 func findTarget(_ root: TreeNode?, _ k: Int) -> Bool { 7 guard let node = root else { return false } 8 9 return depthFS(node, k)10 }11 12 func depthFS(_ root: TreeNode?,_ k: Int) -> Bool{13 14 guard let node = root else { return false}15 16 let complement = k - node.val17 print(node.val)18 if memo.contains(complement){19 return true20 } else {21 memo.insert(node.val)22 }23 24 return depthFS(node.left, k) || depthFS(node.right, k)25 }26 }

 

转载于:https://www.cnblogs.com/strengthen/p/10485576.html

你可能感兴趣的文章
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
SDN第四次作业
查看>>
DM8168 DVRRDK软件框架研究
查看>>
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
[最小割][Kruskal] Luogu P5039 最小生成树
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
(转)Android之发送短信的两种方式
查看>>
python第九天课程:遇到了金角大王
查看>>
字符串处理
查看>>
ECharts(Enterprise Charts 商业产品图表库)初识
查看>>
LeetCode Factorial Trailing Zeroes (阶乘后缀零)
查看>>
hdu 5402 Travelling Salesman Problem (技巧,未写完)
查看>>
[AIR] 获取U盘,打开U盘
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>