剑指 Offer II 056. 二叉搜索树中两个节点之和

题目

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

示例1:

1
2
3
输入: root = [8,6,10,5,7,9,11], k = 12
输出: true
解释: 节点 5 和节点 7 之和等于 12

示例2:

1
2
3
输入: root = [8,6,10,5,7,9,11], k = 22
输出: false
解释: 不存在两个节点值之和为 22 的节点

提示:

  • 二叉树的节点个数的范围是 [1, 10^4].
  • -10^4 <= Node.val <= 10^4
  • root 为二叉搜索树
  • -10^5 <= k <= 10^5

解法一:

JAVA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public boolean findTarget(TreeNode root, int k) {
Map<Integer, Integer> map = new HashMap<>();

travel(root, map);
for (int num : map.keySet()) {
map.put(num, map.get(num) - 1);
if (map.getOrDefault(k - num, 0) > 0) {
return true;
}
}
return false;
}

private void travel(TreeNode root, Map<Integer, Integer> map) {
if (Objects.isNull(root)) {
return;
}

map.put(root.val, map.getOrDefault(root.val, 0) + 1);
travel(root.right, map);
travel(root.left, map);
}
0%