问题链接:653。二和IV-输入为BST我的代码无法通过提交的相同测试用例:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
var Begin *TreeNode=nil
func findTarget(root *TreeNode, k int) bool {
if(Begin==nil){
Begin=root
}
if(root==nil){
return false
}
if(search(root,k-root.Val)==true){
return true
}
return findTarget(root.Left,k) || findTarget(root.Right,k)
}
func search(node *TreeNode,complement int) bool{
var curr *TreeNode=Begin
for curr!=nil{
if(complement>curr.Val){
curr=curr.Right
}else if(complement<curr.Val){
curr=curr.Left
}else{
if(curr==node){
return false
}else{
return true
}
}
}
return false
}
我用c++、java、python用同样的逻辑写了它,都通过了提交,奇怪的是我使用了这个测试用例(我从提交错误警报中复制了测试用例("[0,-1,2,-3,null,null,4],-4";";运行代码";进程接受结果,但提交了相同的测试用例,它仍然会提醒错误的提交。
这是因为Begin
是在所有内容之前声明的,并且它并不总是初始化为nil
。试试类似的东西:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func foo(root * TreeNode, k int, Begin * TreeNode) bool {
if (Begin == nil) {
Begin = root
}
if (root == nil) {
return false
}
if search(root, k - root.Val, Begin) {
return true
}
return foo(root.Left, k, Begin) || foo(root.Right, k, Begin)
}
func findTarget(root * TreeNode, k int) bool {
var Begin * TreeNode = nil
return foo(root, k, Begin)
}
func search(node * TreeNode, complement int, Begin * TreeNode) bool {
var curr * TreeNode = Begin
for curr != nil {
if (complement > curr.Val) {
curr = curr.Right
} else if (complement < curr.Val) {
curr = curr.Left
} else {
if (curr == node) {
return false
} else {
return true
}
}
}
return false
}