来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/opLdQZ 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

给定一个二叉搜索树的 根节点 root 和一个整数 k , 请判断该二叉搜索树中是否存在两个节点它们的值之和等于 k 。假设二叉搜索树中节点的值均唯一。

解答

递归即可,但是需要一个记录表记录之前的值,判断差值是否在记录表中,在的话则返回 true

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val, left, right) {
  4. * this.val = (val===undefined ? 0 : val)
  5. * this.left = (left===undefined ? null : left)
  6. * this.right = (right===undefined ? null : right)
  7. * }
  8. */
  9. /**
  10. * @param {TreeNode} root
  11. * @param {number} k
  12. * @return {boolean}
  13. */
  14. var findTarget = function(root, k) {
  15. let isFind = false;
  16. function traverse (node, list) {
  17. if (!node) return null;
  18. traverse(node.left, list);
  19. if (list[k - node.val]) {
  20. isFind = true;
  21. }
  22. list[node.val] = true;
  23. traverse(node.right, list);
  24. }
  25. traverse(root, {});
  26. return isFind;
  27. };