LeetCode 1214. 查找两棵二叉搜索树之和(二叉树迭代器+双指针)

    技术2025-04-10  8

    文章目录

    1. 题目2. 解题

    1. 题目

    给出两棵二叉搜索树,请你从两棵树中各找出一个节点,使得这两个节点的值之和等于目标值 Target。

    如果可以找到返回 True,否则返回 False。

    示例 1: 输入:root1 = [2,1,4], root2 = [1,0,3], target = 5 输出:true 解释:23 和为 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);//ascending bst_iter bstit2(root2,true);//descending int 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(); else return true; } return false; } };

    48 ms 28.7 MB


    我的博客地址 https://michael.blog.csdn.net/

    长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

    Processed: 0.013, SQL: 9