【Leetcode】1214. Two Sum BSTs
题目地址:
https://leetcode.com/problems/two-sum-bsts/
给定两棵二叉搜索树,再给定一个数xxx,问两棵BST里是否各自存在一个节点使得它们之和恰好等于xxx。
在两个序列上做这件事是容易的,可以直接用对撞双指针(一个指针指向第一个数组的开头,另一个指向第二个数组的结尾)。现在要在两棵BST上做,思路是一样的,可以先实现二叉树的中序遍历的迭代器,以及逆序中序遍历的迭代器,然后就可以当成数组的情况来做了。
中序遍历迭代器的写法是用栈,初始化的时候,先将树根所在的左链push进栈,每次弹出的节点即为下一个走到的节点,走到之后,将其左儿子所在的左链push进栈(如果有的话)。逆序中序遍历迭代器的写法和正序中序遍历迭代器的写法是对称的。
代码如下:
class Solution {public:struct Ite {stack<TreeNode *> stk;bool desc;Ite(TreeNode *root, bool desc) : desc(desc) {while (root) {stk.push(root);root = !desc ? root->left : root->right;}}// 重载bool()运算符operator bool() { return stk.size(); }// 重载dereference运算符int operator*() { return stk.top()->val; }// 重载前置++运算符Ite &operator++() {auto t = stk.top(); stk.pop();if (!desc) {auto right = t->right;while (right) {stk.push(right);right = right->left;}} else {auto left = t->left;while (left) {stk.push(left);left = left->right;}}return *this;}};bool twoSumBSTs(TreeNode *r1, TreeNode *r2, int t) {Ite it1(r1, false), it2(r2, true);while (it1 && it2) {int x1 = *it1, x2 = *it2;if (x1 + x2 < t) ++it1;else if (x1 + x2 > t) ++it2;else return true;}return false;}
};
时间复杂度O(n1+n2)O(n_1+n_2)O(n1+n2),空间O(h1+h2)O(h_1+h_2)O(h1+h2)。
【Leetcode】1214. Two Sum BSTs相关推荐
- 【LeetCode】1. Two Sum
传送门:https://leetcode.com/problems/two-sum/#/description 一.题目描述 Given an array of integers, return in ...
- 【leetcode】Minimum Path Sum
Minimum Path Sum Given a m x n grid filled with non-negative numbers, find a path from top left to b ...
- 【LeetCode】#39组合总和(Combination Sum)
[LeetCode]#39组合总和(Combination Sum) 加粗样式 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数 ...
- 【LeetCode】【HOT 100】2. 两数相加
[LeetCode][HOT 100]2. 两数相加 文章目录 [LeetCode][HOT 100]2. 两数相加 package hot;import java.util.Arrays;class ...
- 【LeetCode】剑指 Offer 34. 二叉树中和为某一值的路径
[LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 文章目录 [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 package offer;import ja ...
- 【LeetCode】剑指 Offer 13. 机器人的运动范围
[LeetCode]剑指 Offer 13. 机器人的运动范围 文章目录 [LeetCode]剑指 Offer 13. 机器人的运动范围 package offer;public class Solu ...
- 【LeetCode】第643题——子数组最大平均数I(难度:简单)
[LeetCode]第643题--子数组最大平均数I(难度:简单) 题目描述 解题思路 代码详解 注意点 题目描述 给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数. 示 ...
- 【leetcode】771. 宝石与石头 (简单)
[leetcode]771. 宝石与石头 给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头. stones 中每个字符代表了一种你拥有的石头的类型,你 ...
- 【LeetCode】1641. Count Sorted Vowel Strings(动态规划)
[LeetCode]1641. Count Sorted Vowel Strings(动态规划) Given an integer n, return the number of strings of ...
- 【leetcode】二维子矩阵的和
一. 题目描述给定一个二维矩阵 matrix,以下类型的多个请求: 计算其子矩形范围内元素的总和,该子矩阵的左上角为 : (row1, col1) ,右下角为 (row2, col2) . 实现 Nu ...
最新文章
- 剑指offer_第1题_二维数组中的查找
- python自学网站有哪些-分享干货:三个新手自学Python的网站!
- 【转】从3个科技公司里学到的57条经验
- SAP License管理
- Oracle分页查询语句
- SpringBoot高级-消息-RabbitTemplate发送接受消息序列化机制
- 编程实现木马的ActiveX启动和注入IE的启动方式
- 智慧社区防控(测温)
- github emoji 表情列表 1
- 《PaaS程序设计》一1.2 云能为创新做什么
- faster rcnn resnet_张航、李沐等人提出ResNet最强改进版:性能提高3%,参数不增
- 推荐一款ORM工具 FOR ADOBE AIR
- 零跑科技实现“领跑”背后:频现“质量门”,噱头大于实际?
- 2019年全国各类型POI数据
- 软考-架构师-第六章-开发方法 第二节 软件开发模型(读书笔记)
- python马尔可夫链_Python中的马尔可夫链(初学者)
- 针对文档加密系统,如何不破解将文档解密上传
- imx6ull用video4linux,CB140(imx6ull)使用Openwrt系统
- c盘扩容(亲测有效)+软件已备好
- WeQuant交易策略—5日均线
热门文章
- ansible中变量注册 register的使用
- 如何删除双系统中的一个系统
- JavaScript实现12进制的时钟特效
- 计算机读不出光盘,光驱读不出光盘,小编教你电脑光盘不能被识别怎么解决
- 蓝桥ROS机器人之v-rep_pro_edu_v3_6_2
- 一文说透区块链为何必须扩容,扩容的未来在哪里?
- python取出字典重复值_在Python中的字典中查找具有重复值的键
- Python基础+数据科学入门(四)程序控制结构
- 可调稳压电源lm317实验报告_LM317可调稳压电源电路图
- python一键安装所有插件_解放你的双手,让你一键安装所有的KODI插件的懒人包来了...