剑指 Offer II 056. 二叉搜索树中两个节点之和
Ideas这题有点类似一个组合题,首先是通过二叉树遍历得到一个序列,然后再通过LeetCode Algorithm 1. 两数之和的方法查找是否存在两数之和就OK了。
二叉树的遍历直接默写模板,然后查找两数之和可以通过哈希表实现。
Code C++class Solution { public: vector<int> preorder_traversal(TreeNode* node) { vector<int> ans; stack<TreeNode*> stk; stk.push(node); while (!stk.empty()) { TreeNode* item = stk.top(); stk.pop(); ans.push_back(item->val); if (item->right != nullptr) { stk.push(item->right); } if (item->left != nullptr) { stk.push(item->left); } } return ans; } bool findTarget(TreeNode* root, int k) { if (!root) { return false; } vector<int> preorder_list = preorder_traversal(root); unordered_map<int, int> hash_table; for (int i = 0; i < preorder_list.size(); i++) { auto flag = hash_table.find(k - preorder_list[i]); if (flag != hash_table.end()) { return true; } hash_table[preorder_list[i]] = i; } return false; } };