二叉搜索树中两个节点之和
给定一个二叉搜索树的根节点root和一个整数k,请判断该二叉搜索树中是否存在两个节点它们的值之和等于k。假设二叉搜索树中节点的值均唯一。
小刘解题
对于递归函数来说,如果递归函数在return位置,那么在每次执行后就会跳出此次函数层,进入下一层,下一层的返回结果就是最终结果而不是上层里面某个位置的值。
class Solution {
//定义一个容器用于存放二叉树的值内容
public HashSet<Integer> hashSet = new HashSet<>();
public boolean findTarget(TreeNode root, int k) {
//如果当前节点为空,那么直接返回false
if(root==null){
return false;
}
//如果遍历到当前节点时,该节点可与之前某个节点的和为目标值,则返回true(最终的结果)
if(hashSet.contains(k- root.val)){
return true;
}
//如果遍历到当前节点时,该节点不可与之前的任一节点构成目标值,则把当前值加入容器内,并且向下一层去找寻
else {
hashSet.add(root.val);
return findTarget(root.left,k)||findTarget(root.right,k);
}
}
}
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;
}
}