二叉搜索树中的两数之和,通过遍历得到一个vector数组,转化出1两数之和问题。
#include#include #include #include using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} }; class Solution { public: void inorder(TreeNode* root, vector & res) { if (root == nullptr) { return; } inorder(root->left, res); res.push_back(root->val); inorder(root->right, res); } bool findTarget(TreeNode* root, int k) { vector a; inorder(root, a); unordered_set set; for (int i = 0; i < a.size(); i++) { auto it = set.find(k - a[i]); if (it != set.end())return true; set.insert(a[i]); } return false; } }; void print(TreeNode* a) { if (a != nullptr) { cout << a->val; print(a->left); print(a->right); } } int main() { Solution test; TreeNode* c = new TreeNode(1); TreeNode* b = new TreeNode(3); TreeNode* a = new TreeNode(2,c, b); cout << test.findTarget(a, 3); }



