列表

详情


653. 两数之和 IV - 输入 BST

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

 

示例 1:

输入: root = [5,3,6,2,4,null,7], k = 9
输出: true

示例 2:

输入: root = [5,3,6,2,4,null,7], k = 28
输出: false

 

提示:

相似题目

两数之和

两数之和 II - 输入有序数组

两数之和 III - 数据结构设计

查找两棵二叉搜索树之和

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: bool findTarget(TreeNode* root, int k) { } };

golang 解法, 执行用时: 20 ms, 内存消耗: 7.6 MB, 提交时间: 2021-07-26 13:54:33

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func findTarget(root *TreeNode, k int) bool {
    var ans []int
 	var inorder func(*TreeNode)
	inorder = func(node *TreeNode) {
		if node == nil {
			return
		}
		inorder(node.Left)

		ans = append(ans, node.Val)

		inorder(node.Right)
	}
	inorder(root)

    left := 0
    right := len(ans)-1
    for left < right {  // 双指针
        if ans[left] + ans[right] < k {
            left++
        } else if ans[left] + ans[right] > k {
            right--
        } else {
            return true
        }
    }
    return false
}

golang 解法, 执行用时: 28 ms, 内存消耗: 7.6 MB, 提交时间: 2021-06-25 15:18:06

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func findTarget(root *TreeNode, k int) bool {
    var ans []int
 	var inorder func(*TreeNode)
	inorder = func(node *TreeNode) {
		if node == nil {
			return
		}
		inorder(node.Left)

		ans = append(ans, node.Val)

		inorder(node.Right)
	}
	inorder(root)

    left := 0
    right := len(ans)-1
    for left < right {
        if ans[left] + ans[right] < k {
            left++
        } else if ans[left] + ans[right] > k {
            right--
        } else {
            return true
        }
    }
    return false
}

上一题