leetcode 653. Two Sum IV

来源:互联网 发布:虚拟机安装mac dmg 编辑:程序博客网 时间:2024/06/05 12:40

原题:

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   7Target = 9Output: True

Example 2:

Input:     5   / \  3   6 / \   \2   4   7Target = 28Output: 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);}

我的算法就是先中序遍历,然后双端查找就好咯。