题目
给你 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] 范围内
-105 <= Node.val <= 105
代码
package dayLeetCode;
import java.util.ArrayList;
import java.util.List;
public class dayleetcode1305 {
/**
* 二叉搜索树是有序的,所以我们先中序遍历得到一个从小到大排序的序列
* 然后将两个有序序列进行合并
*
* @param root1
* @param root2
* @return
*/
public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
return getArrays(inorderSearch(root1, new ArrayList<Integer>()), inorderSearch(root2, new ArrayList<Integer>()));
}
private List<Integer> getArrays(List<Integer> inorderSearch1, List<Integer> inorderSearch2) {
List<Integer> ansList = new ArrayList<>();
int i = 0, j = 0;
while (i < inorderSearch1.size() && j < inorderSearch2.size()) {
if (inorderSearch1.get(i) < inorderSearch2.get(j)) {
ansList.add(inorderSearch1.get(i));
i++;
} else {
ansList.add(inorderSearch2.get(j));
j++;
}
}
if (i == inorderSearch1.size()) {
while (j < inorderSearch2.size()) {
ansList.add(inorderSearch2.get(j++));
}
}
if (j == inorderSearch2.size()) {
while (i < inorderSearch1.size()) {
ansList.add(inorderSearch1.get(i++));
}
}
return ansList;
}
//中序遍历
private List<Integer> inorderSearch(TreeNode root, ArrayList<Integer> nums) {
if (root == null)
return nums;
inorderSearch(root.left, nums);
nums.add(root.val);
inorderSearch(root.right, nums);
return nums;
}
}
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;
}
}