653. Two Sum IV - Input is a BST
Given a Binary Search Tree and a target number, return true if there exist two elements in the BST such that their sum is equal to the given target.
解法:中序遍历BST树并按照从小到大的顺序输出到一个int数组中,从而转化为从有序数组中寻找某个指定值。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int findNums(struct TreeNode *node) {
if (!node) {
return 0;
}
return findNums(node->left) + findNums(node->right) + 1;
}
void inOrderBST(struct TreeNode *node, int *arr, int *ct) {
if (!node) {
return;
}
inOrderBST(node->left, arr, ct);
arr[*ct] = node->val;
(*ct)++;
inOrderBST(node->right, arr, ct);
}
bool searchArray(int *arr, int ct, int k) {
int i = 0, j = ct - 1;
while (i < j) {
if (arr[i] + arr[j] == k) {
return true;
} else if (arr[i] + arr[j] > k) {
j--;
} else {
i++;
}
}
return false;
}
bool findTarget(struct TreeNode* root, int k) {
if (!root) {
return NULL;
}
int num = findNums(root);
int *arr = (int *)malloc(sizeof(int) * num);
int ct = 0;
inOrderBST(root, arr, &ct);
return searchArray(arr, ct, k);
}
Submission Detail
421 / 421 test cases passed. | Status: Accepted |
Runtime: 16 ms | Submitted: 7 minutes ago |