653. 两数之和 IV - 输入 BST
题意:给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
解题思路
解法1:
1.递归遍历二叉树,将所有的值,保存在map中,key为节点的值,value为出现的次数
2.遍历map,如果map中包含target-current.val
,则返回true
3.切记,上一条件,还需加一层判断,如果target-current.val == current.val
,那么说明current.val必须出现两次以上,才可以返回true
解题遇到的问题
无
后续需要总结学习的知识点
需要深入总结学习二叉搜索树的数据结构的特点、应用、搜索、插入、删除
##解法1
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
class Solution {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
public boolean findTarget(TreeNode root, int k) {
preTree(root);
Iterator<Entry<Integer, Integer>> iterator = map.entrySet().iterator();
boolean ans = false;
while (iterator.hasNext()) {
Entry<Integer, Integer> entry = iterator.next();
if (map.containsKey(k - entry.getKey())) {
if (k - entry.getKey() == entry.getKey()) {
ans = (entry.getValue() == 2);
} else {
ans = true;
}
if (ans) {
break;
}
}
}
return ans;
}
private void preTree(TreeNode root) {
if (root == null) {
return;
}
map.put(root.val, map.getOrDefault(root.val, 0) + 1);
preTree(root.left);
preTree(root.right);
}
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
}
网友评论