解析
数组T存放(k-val)值
last指向数组T尾部
改进
数组T使用Hash数组替代, 使得搜寻时间复杂度从O(n)降为O(1)
代码
//搜寻target值是否存在
bool Find(int *T, int *last, int target){
bool ret=false;
for(int i=0;i<=*last;i++){
if(T[i]==target) {ret=true;break;}
}
return ret;
}
/*
p为空返回false,
p非空则在数组T中搜寻p->val值
搜寻成功则返回true
否则将k-(p->val)值放入数组T中
最后继续搜寻p的左右子树
*/
bool Func(struct TreeNode *p, int *T, int *last, int *k){
if(p==NULL) return false;
int target=*k-p->val;
if(Find(T, last, p->val)){return true;}
T[++(*last)]=target;
return Func(p->left, T ,last, k) ||Func(p->right, T ,last, k);
}
bool findTarget(struct TreeNode* root, int k){
int T[10000];
int last=-1;
return Func(root, T ,&last, &k);
}