【leetcode】653.两数之和 IV - 输入二叉搜索树

45 阅读1分钟

leetcode.png

题目简述:二叉搜索树中找到两个元素,如果这两个元素之和等于k,那么就返回true,如果找不到,则返回false
思路:因为是二叉搜索树的关系,所以可以转换为有序的数组来做这一题,二叉搜索树的中序遍历是一个递增的数组,所以,可以利用这一性质。 转换后的题目就是167题

这一题考察了中序遍历的写法,以及对数组的逻辑处理。

var findTarget = function (root, k) {
    let nums = []
    // 中序遍历
    var inorder = function (root) {
        if (!root) return
        inorder(root.left)
        nums.push(root.val)
        inorder(root.right)
    }
    inorder(root)
    let left = 0, right = nums.length - 1
    while (left < right) {
        let sum = nums[left] + nums[right]
        // 寻找合适的点
        if (sum === k) {
            return true
        } else if (sum < k) {
            left++
        } else {
            right--
        }
    }
    return false
};