653.两数之和IV - 输入二叉搜索树
中序遍历+双指针
使用两个指针分别指向数组的头尾,当两个指针指向的元素之和小于 kk 时,让左指针右移;当两个指针指向的元素之和大于 kk 时,让右指针左移;当两个指针指向的元素之和等于 kk 时,返回 TrueTrue。
最终,当左指针和右指针重合时,树上不存在两个和为 kk 的节点,返回 FalseFalse。
vector<int> vec;
void inorderTraversal(TreeNode *node) {
if (node == nullptr) {
return;
}
inorderTraversal(node->left);
vec.push_back(node->val);
inorderTraversal(node->right);
}
bool findTarget(TreeNode *root, int k) {
inorderTraversal(root);
int left = 0, right = vec.size() - 1;
while (left < right) {
if (vec[left] + vec[right] == k) {
return true;
}
if (vec[left] + vec[right] < k) {
left++;
} else {
right--;
}
}
return false
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/two-sum-iv-input-is-a-bst/solution/liang-shu-zhi-he-iv-shu-ru-bst-by-leetco-b4nl/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
235. 二叉搜索树的最近公共祖先
二叉搜索树特性:左子树比根节点小,右子树比根节点大
* 三种情况
* 第一种:p,q均在root的右子树
* 第二种:p,q均在root的左子树
* 第三种:,最近祖先只能是root
**/
第一种情况,p和q都在右子树,应该把视角放在右边,去右子树找第三种情况
if(root.val<p.val&&root.val<q.val){
return lowestCommonAncestor(root.right, p, q);
}
第二种情况,p和q都在左子树,应该把视角放在左边,去左子树找第三种情况
if(root.val>p.val&&root.val>q.val){
return lowestCommonAncestor(root.left, p, q);
}
第三种情况,p,q不在同一子树,只能是p,q分别在一左一右,或者,p,q其中一个是根节点,都返回root
return root;
235.二叉树的最近公共祖先
深度优先遍历+递归