题目
给定一个二叉搜索树 root 和一个目标结果 k,如果二叉搜索树中存在两个元素且它们的和等于给定的目标结果,则返回 true。
示例 1:
输入: root = [5,3,6,2,4,null,7], k = 9
输出: true
示例 2:
输入: root = [5,3,6,2,4,null,7], k = 28
输出: false
提示:
二叉树的节点个数的范围是 [1, 1 0 4 10^4 104].
− 1 0 4 -10^4 −104 <= Node.val <= 1 0 4 10^4 104
题目数据保证,输入的 root 是一棵 有效 的二叉搜索树
− 1 0 5 -10^5 −105 <= k <= 1 0 5 10^5 105
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/two-sum-iv-input-is-a-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
- 先遍历二叉树,然后把k减去一个节点的值,再去二叉树中去找这个值就可以了
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool find(struct TreeNode* root,int n,struct TreeNode* temp)
{
if(!root)
{
return false;
}
if(root->val==n&&root!=temp)
{
return true;
}
if(root->val>n)
{
return find(root->left,n,temp);
}
else if(root->val<n)
{
return find(root->right,n,temp);
}
return ;
}
bool target(struct TreeNode* root,struct TreeNode* temp,int k)
{
if(!temp)
{
return false;
}
if(find(root,k-temp->val,temp))
{
return true;
}
return target(root,temp->left,k)||target(root,temp->right,k);
}
bool findTarget(struct TreeNode* root, int k){
return target(root,root,k);
}