1. 題目
題目鏈接:https://leetcode.com/problems/all-elements-in-two-binary-search-trees/
2. 題意
題目要求是合併兩個搜索二叉樹,合併成爲一個List
3. 方法
3.1 思路
比較簡單的做法,由於兩棵樹都是二叉搜索樹,通過中序遍歷,輸出有序的數組,再將兩個數組進行合併,時間複雜度上爲O(n)
。
3.2 代碼
public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
List<Integer> list1 = new ArrayList<>();
inorderTraversal(root1, list1);
List<Integer> list2 = new ArrayList<>();
inorderTraversal(root2, list2);
List<Integer> list = new ArrayList<>();
int i1 = 0, i2 = 0;
while (i1 < list1.size() && i2 < list2.size()) {
if (list1.get(i1) > list2.get(i2)) {
list.add(list2.get(i2++));
} else {
list.add(list1.get(i1++));
}
}
while (i1 < list1.size()) {
list.add(list1.get(i1++));
}
while (i2 < list2.size()) {
list.add(list2.get(i2++));
}
return list;
}
// 中序遍歷
private void inorderTraversal(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
inorderTraversal(root.left, list);
list.add(root.val);
inorderTraversal(root.right, list);
}
3.3 運行結果
4. 相關鏈接
本題代碼的github鏈接
LeetCode Top 100 Liked Questions 題目
其他LeetCode題目