LeetCode 1305「两棵二叉搜索树中的所有元素」
Posted 陈皮的JavaLib
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1305「两棵二叉搜索树中的所有元素」相关的知识,希望对你有一定的参考价值。
我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新技术文章。回复【资料】,即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板。
文章目录
题目
给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含两棵树中的所有整数并按升序排序。
示例1:
- 输入:root1 = [2,1,4], root2 = [1,0,3]
- 输出:[0,1,1,2,3,4]
示例2:
- 输入:root1 = [1,null,8], root2 = [8,1]
- 输出:[1,1,8,8]
提示:
- 每棵树的节点数在 [0, 5000] 范围内
- -10^5 <= Node.val <= 10^5
题目来源:LeetCode
分析
二叉搜索树的定义:
- 当前节点的左子树中的数均小于当前节点的数。
- 当前节点的右子树中的数均大于当前节点的数。
- 所有左子树和右子树自身也是二叉搜索树。
使用中序遍历访问一颗二叉搜索树,即先访问左子树,再访问根节点。最后访问右子树。那么可以得到一个有序数组。
这样,我们可以使用中序遍历对2棵树进行访问,得到2个有序数组。然后再使用2个指针遍历2个有序数组,进行合并到另一个有序数组中即可。
实现
package com.chenpi.no1315GetAllElements;
import java.util.ArrayList;
import java.util.List;
/**
* @Description
* @Author 陈皮
* @Date 2022/5/1
* @Version 1.0
*/
public class No1315GetAllElements
public static void main(String[] args)
No1315GetAllElements inst = new No1315GetAllElements();
TreeNode root1 = new TreeNode(2, new TreeNode(1), new TreeNode(4));
TreeNode root2 = new TreeNode(1, new TreeNode(0), new TreeNode(3));
System.out.println(inst.getAllElements(root1, root2));
public List<Integer> getAllElements(TreeNode root1, TreeNode root2)
// 获取有序数组
List<Integer> orderList1 = new ArrayList<>();
inOrder(root1, orderList1);
// 获取有序数组
List<Integer> orderList2 = new ArrayList<>();
inOrder(root2, orderList2);
List<Integer> list = new ArrayList<>();
int i = 0, j = 0;
while (i < orderList1.size() || j < orderList2.size())
if (i == orderList1.size())
list.add(orderList2.get(j++));
continue;
if (j == orderList2.size())
list.add(orderList1.get(i++));
continue;
if (orderList1.get(i) < orderList2.get(j))
list.add(orderList1.get(i++));
else
list.add(orderList2.get(j++));
return list;
// 中序遍历
private void inOrder(TreeNode root, List<Integer> orderList)
// 空节点,则返回
if (root == null)
return;
// 遍历左子树
inOrder(root.left, orderList);
// 当前值
orderList.add(root.val);
// 遍历右子树
inOrder(root.right, orderList);
// Definition for a binary tree node.
class TreeNode
int val;
TreeNode left;
TreeNode right;
TreeNode()
TreeNode(int val)
this.val = val;
TreeNode(int val, TreeNode left, TreeNode right)
this.val = val;
this.left = left;
this.right = right;
// 输出结果如下
[0, 1, 1, 2, 3, 4]
Leetcode 执行结果:
本次分享到此结束啦~~
如果觉得文章对你有帮助,点赞、收藏、关注、评论,您的支持就是我创作最大的动力!
以上是关于LeetCode 1305「两棵二叉搜索树中的所有元素」的主要内容,如果未能解决你的问题,请参考以下文章
[leetcode] 1305. 两棵二叉搜索树中的所有元素 | 遍历