您的位置:首页 > 其它

LeetCode 653: Two Sum IV - Input is a BST

2017-09-01 14:26 375 查看
Edge case:

need to determine whether two numbers come from same node.

/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean findTarget(TreeNode root, int k) {
if (root == null) {
return false;
}

return inorderAndSearch(root, root, k);
}

private boolean inorderAndSearch(TreeNode current, TreeNode root, int target) {
if (current == null) {
return false;
}

return inorderAndSearch(current.left, root, target) || findValue(root, target - current.val, current) || inorderAndSearch(current.right, root, target);
}

private boolean findValue(TreeNode root, int value, TreeNode current) {
if (root == null) {
return false;
}

return (root != current && root.val == value) || findValue(root.left, value, current) || findValue(root.right, value, current);
}
}


/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean findTarget(TreeNode root, int k) {
if (root == null) {
return false;
}

List<Integer> nums = new ArrayList<>();
inorder(root, nums);
int start = 0;
int end = nums.size() - 1;
while (start < end) {
if (nums.get(start) + nums.get(end) == k) {
return true;
} else if (nums.get(start) + nums.get(end) > k) {
end--;;
} else {
start++;;
}
}
return false;
}

private void inorder(TreeNode root, List<Integer> nums) {
if (root == null) {
return;
}
inorder(root.left, nums);
nums.add(root.val);
inorder(root.right, nums);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: