原题:
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.
Example 1:
Input: 5 / \ 3 6 / \ \ 2 4 7 Target = 9 Output: True
Example 2:
Input: 5 / \ 3 6 / \ \ 2 4 7 Target = 28 Output: False代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool findTarget(struct TreeNode* root, int k) {
int* list;
list=(int *)malloc(sizeof(int)*20000);
int* count;
count=(int *)malloc(sizeof(int));
*count=0;
setlist(root,count,list);
//printf("%d",*count);
int n=0;
int m=*count-1;
while(n<m)
{
//printf("%d,%d",*(list+n),*(list+m));
if(*(list+n)+*(list+m)>k)
m--;
else if (*(list+n)+*(list+m)<k)
n++;
else
return true;
}
return false;
}
void setlist(struct TreeNode* root,int* count,int *list)
{
if(root->left!=NULL)
setlist(root->left,count,list);
*(list+*count)=root->val;
(*count)++;
if(root->right!=NULL)
setlist(root->right,count,list);
}
我的算法就是先中序遍历,然后双端查找就好咯。