算法记录
LeetCode 题目:
给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。
说明
一、题目
输入:root1 = [2,1,4], root2 = [1,0,3]
输出:[0,1,1,2,3,4]
二、分析
- 二插搜索树的特点就是按照中序遍历的序列是一个升序数组。
- 也就是只要中序遍历之后合并两条序列即可,用归并合并的方式进行合并。
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);
}
}
总结
熟悉二插搜索树的性质特点、树的遍历方法、归并的合并操作。