提交 c5257f96 编写于 作者: 梦境迷离's avatar 梦境迷离

add scala leetcode 653

上级 28a8aad6
......@@ -33,6 +33,7 @@ Leetcode Scala 实现
* [把二叉搜索树转换为累加树](./src/main/scala/io/github/dreamylost/Leetcode_538.scala)
* [二叉树的坡度](./src/main/scala/io/github/dreamylost/Leetcode_563.scala)
* [根据二叉树创建字符串](./src/main/scala/io/github/dreamylost/Leetcode_606.scala)
* [两数之和 IV - 输入 BST](./src/main/scala/io/github/dreamylost/Leetcode_653.scala)
## 链表
......
......@@ -4,6 +4,7 @@ package io.github.dreamylost
import java.util.{ Queue => _ }
//过期,以后使用List
import scala.collection.immutable.Queue
import scala.collection.immutable.Stack
......
package io.github.dreamylost
/**
* 653. 两数之和 IV - 输入 BST
*
* 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
*
* @author 梦境迷离 dreamylost
* @since 2020-06-15
* @version v1.0
*/
object Leetcode_653 extends App {
val ret = findTarget(TreeNodeData.treeData3_4(), 4)
println(ret)
/**
* 2060 ms,16.67%
* 54.7 MB,100.00%
*
* @param root
* @param k
* @return
*/
def findTarget(root: TreeNode, k: Int): Boolean = {
def inorderTraversal(root: TreeNode): Seq[Int] = {
var ret = Seq[Int]()
var stack = List[TreeNode]()
if (root == null) return ret
var cur = root
while (cur != null || stack.nonEmpty) {
while (cur != null) {
//头进头出模拟栈
stack = cur :: stack
cur = cur.left
}
val (node, s) = (stack.head, stack.tail)
stack = s
ret = ret ++ Seq(node.value)
cur = node.right
}
ret
}
val nums = inorderTraversal(root)
var i = 0
var j = nums.length - 1
while (i < j) {
if (nums(i) + nums(j) == k) {
return true
} else if (nums(i) + nums(j) < k) {
i += 1
} else {
j -= 1
}
}
false
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册