文章目录
- 1. 题目
- 2. 解题
1. 题目
给出两棵二叉搜索树,请你从两棵树中各找出一个节点,使得这两个节点的值之和等于目标值 Target。
如果可以找到返回 True,否则返回 False。
示例 1:
输入:root1 = [2,1,4], root2 = [1,0,3], target = 5
输出:true
解释:2 加 3 和为 5 。示例 2:
输入:root1 = [0,-10,10], root2 = [5,1,7,0,2], target = 18
输出:false提示:
每棵树上最多有 5000 个节点。
-10^9 <= target, node.val <= 10^9
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum-bsts
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 写一个二叉搜索树的迭代器,一个升序,一个降序
- 双指针一个指向最小的,一个指向最大的,根据情况决定,哪个往下挪
class bst_iter
{stack<TreeNode*> s;TreeNode* cur;int v;bool postorder;
public:bst_iter(TreeNode* root, bool postorder = false){cur = root;this->postorder = postorder;//降序}int next(){if(!postorder && (cur || !s.empty())){while(cur){s.push(cur);cur = cur->left;}v = s.top()->val;cur = s.top()->right;s.pop();return v;}else if(postorder && (cur || !s.empty())){while(cur){s.push(cur);cur = cur->right;//降序先遍历右边}v = s.top()->val;cur = s.top()->left;s.pop();return v;}return INT_MAX;}
};
class Solution {
public:bool twoSumBSTs(TreeNode* root1, TreeNode* root2, int target) {bst_iter bstit1(root1);//ascendingbst_iter bstit2(root2,true);//descendingint v1 = bstit1.next(), v2 = bstit2.next();while(v1 != INT_MAX && v2 != INT_MAX){if(v1+v2 < target)v1 = bstit1.next();else if(v1+v2 > target)v2 = bstit2.next();elsereturn true;}return false;}
};
48 ms 28.7 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!