题目描述
给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
总结
简单的搜索树DFS题,简单,不过蛮经典的
Sample Code
class Solution {
TreeNode t;
int Max,Min;
public boolean findTarget(TreeNode root, int k) {
if(root == null || (root.left == null && root.right == null)){
return false;
}
t = root;
Min = minNode(root).val;
Max = maxNode(root).val;
if(k <= 2 * Min || k >= 2 * Max){
return false;
}
return find(root, k);
}
private boolean find(TreeNode root, int k) {
if(root != null){
int w = k - root.val;
if(w >= Min && w <= Max && w != root.val){
if(DFS(t, w)){
return true;
}
}
return find(root.left, k) || find(root.right, k);
}
return false;
}
private boolean DFS(TreeNode root, int k){
if(root != null){
if(root.val == k){
return true;
}else if(root.val > k){
return DFS(root.left, k);
}else{
return DFS(root.right, k);
}
}
return false;
}
private TreeNode minNode(TreeNode root){
if(root != null) {
if (root.left == null) {
return root;
} else {
return minNode(root.left);
}
}
return null;
}
private TreeNode maxNode(TreeNode root){
if(root != null){
if(root.right == null) {
return root;
}else{
return maxNode(root.right);
}
}
return null;
}
}