1305. 两棵二叉搜索树中的所有元素
Posted 不吐西瓜籽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1305. 两棵二叉搜索树中的所有元素相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
给你 root1
和 root2
这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.
说明
一、题目
输入:root1 = [2,1,4], root2 = [1,0,3]
输出:[0,1,1,2,3,4]
二、分析
- 二插搜索树的特点就是按照中序遍历的序列是一个升序数组。
- 也就是只要中序遍历之后合并两条序列即可,用归并合并的方式进行合并。
/**
* Definition for a binary tree node.
* public 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;
* }
* }
*/
class Solution {
public List merge(List<Integer> l1, List<Integer> l2) {
List<Integer> ans = new ArrayList();
for(int i = 0, j = 0; i < l1.size() || j < l2.size(); ) {
if(j >= l2.size() || (i < l1.size() && l1.get(i) < l2.get(j))) {
ans.add(l1.get(i));
i++;
} else {
ans.add(l2.get(j));
j++;
}
}
return ans;
}
public void inOrder(TreeNode root, List order) {
if(root == null) return ;
inOrder(root.left, order);
order.add(root.val);
inOrder(root.right, order);
}
public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
List<Integer> h1 = new ArrayList(), h2 = new ArrayList();
inOrder(root1, h1);
inOrder(root2, h2);
return merge(h1, h2);
}
}
总结
熟悉二插搜索树的性质特点、树的遍历方法、归并的合并操作。
以上是关于1305. 两棵二叉搜索树中的所有元素的主要内容,如果未能解决你的问题,请参考以下文章