力扣——1305. 两棵二叉搜索树中的所有元素(Java、JavaScript)
2023-09-14 09:05:31 时间
JavaScript代码:
/**
* @param {TreeNode} root1
* @param {TreeNode} root2
* @return {number[]}
*/
var getAllElements = function (root1, root2) {
function BSTIterator(root) {
let stack = [];
// 左侧树枝一撸到底
const pushLeftBrach = (p) => {
while (p) {
stack.push(p);
p = p.left;
}
};
pushLeftBrach(root);
this.peek = () => {
return stack[stack.length - 1].val;
};
this.next = () => {
let p = stack.pop();
pushLeftBrach(p.right);
return p.val;
};
this.hasNext = () => {
return stack.length;
};
}
let t1 = new BSTIterator(root1);
let t2 = new BSTIterator(root2);
let res = [];
while (t1.hasNext() && t2.hasNext()) {
if (t1.peek() > t2.peek()) {
res.push(t2.next());
} else {
res.push(t1.next());
}
}
// 如果有一棵 BST 还剩元素,添加到最后
while (t1.hasNext()) {
res.push(t1.next());
}
while (t2.hasNext()) {
res.push(t2.next());
}
return res;
};
Java代码:
class Solution {
public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
List<Integer> nums1 = new ArrayList<Integer>();
List<Integer> nums2 = new ArrayList<Integer>();
inorder(root1, nums1);
inorder(root2, nums2);
List<Integer> merged = new ArrayList<Integer>();
int p1 = 0, p2 = 0;
while (true) {
if (p1 == nums1.size()) {
merged.addAll(nums2.subList(p2, nums2.size()));
break;
}
if (p2 == nums2.size()) {
merged.addAll(nums1.subList(p1, nums1.size()));
break;
}
if (nums1.get(p1) < nums2.get(p2)) {
merged.add(nums1.get(p1++));
} else {
merged.add(nums2.get(p2++));
}
}
return merged;
}
public void inorder(TreeNode node, List<Integer> res) {
if (node != null) {
inorder(node.left, res);
res.add(node.val);
inorder(node.right, res);
}
}
}
作者:KJ.JK
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习
相关文章
- Java常用类库--Runtime类
- The type java.lang.reflect.AnnotatedElement cannot be resolved. It is indirectly referenced from required .class files
- Java学习----Java概述
- Java 第十一届 蓝桥杯 省模拟赛 反倍数
- Java实现 LeetCode 372 超级次方
- Java实现 LeetCode 205 同构字符串
- Java实现 LeetCode 88 合并两个有序数组
- Java实现 洛谷 P1159 排行榜
- java实现第五届蓝桥杯年龄巧合
- java实现第六届蓝桥杯隔行变色
- Java实现 蓝桥杯 基础练习 01字串
- Java实现蓝桥杯 算法训练 ALGO-15 旅行家的预算
- java与C++的区别
- java 中 BigDecimal 怎么与 0 比较
- Derby安装,创建数据库,在Java程序中使用Derby
- java 11 移除的一些其他内容,更简化的编译运行程序,Unicode 10,移除了不太使用的JavaEE模块和CORBA技术,废除Nashorn javascript引擎,不建议使用Pack200 相关api
- Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python
- Atitit.实现继承的原理and方法java javascript .net c# php ...
- SAP offline OData插件的JavaScript代码是如何调用到Android平台的Java代码的
- 华为OD机试 - 最小调整顺序次数、特异性双端队列(Java & JS & Python)
- 编程笔试(解析及代码实现):国内各大银行(招商银行/浦发银行等)在线笔试常见题目(猴子吃桃/字符串逆序输出/一段话输出字的个数/单词大小转换等)及其代码实现(Java/Python/C#等)之详细攻略
- 已解决:Caused by: java.lang.IllegalStateException: Only one AsyncConfigurer may exist
- 力扣——883. 三维形体投影面积(Java、JavaScript、C实现)
- JavaScript与Java通信
- 【华为OD机试 2023】投篮大赛(C++ Java JavaScript Python)
- 【华为OD机试 2023】最左侧冗余覆盖子串(C++ Java JavaScript Python)
- 【华为OD机试 2023】 机房布局(C++ Java JavaScript Python)
- 【华为OD机试 2023】获取最大软件版本号(C++ Java JavaScript Python)
- 【华为OD机试 2023】 过滤组合字符串(C++ Java JavaScript Python)
- 【华为OD机试 2023】 最大报酬(C++ Java JavaScript Python)
- 【 华为OD机试 2023】 最大连续文件之和 / 区块链文件转储系统(C++ Java JavaScript Python)
- 【 华为OD机试 2023】荒地建设电站 /区域发电量统计(C++ Java JavaScript Python)
- Java //PP2.17 编写一个applet,画出一些用绳子拴住的各种颜色的气球
- Java抓取网页数据(原网页+Javascript返回数据)
- 【设计模式】Java中的单例模式
- Error running ‘Tomcat‘: Unable to open debugger port (127.0.0.1:2148): java.net.SocketExceptio