使用dfs遍历树,将遍历结果加入集合中,如果集合中存在与当前节点值之和为目标值的元素,返回true
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
private:
bool dfs(TreeNode* root, unordered_set<int>& st, int k) {
if (!root) {
return false;
}
if (st.find(k - root->val) != st.end()) {
return true;
}
st.insert(root->val);
return dfs(root->left, st, k) || dfs(root->right, st, k);
}
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @param k int整型
* @return bool布尔型
*/
bool findTarget(TreeNode* root, int k) {
unordered_set<int> st;
return dfs(root, st, k);
}
};
时间复杂度:在最坏情况下,需要遍历整棵二叉搜索树,时间复杂度为 O(n),其中 n 为树中节点的数量。
空间复杂度:
使用了一个整型无序集合 st 来存储节点值,最坏情况下需要存储所有节点的值,空间复杂度为 O(n);
递归调用时,需要考虑函数调用栈的空间,最坏情况下递归深度为树的高度,空间复杂度为 O(h),其中 h 为树的高度。

京公网安备 11010502036488号