LeetCode 1305. 两棵二叉搜索树中的所有元素
给你 root1
和 root2
这两棵二叉搜索树。请你返回一个列表,其中包含两棵树中的所有整数并按升序排序。
示例 1:
输入:root1 = [2,1,4], root2 = [1,0,3]
输出:[0,1,1,2,3,4]
method
中序遍历得到两个排序数组,合并两个排序数组
void getNum(TreeNode* root, vector<int>& nums) {
if (!root) return;
getNum(root->left, nums);
nums.push_back(root->val);
getNum(root->right, nums);
}
vector<int> getAllElements(TreeNode* root1, TreeNode* root2) {
vector<int> nums1, nums2;
getNum(root1, nums1);
getNum(root2, nums2);
int m = nums1.size(), n = nums2.size();
vector<int> res(m + n);
int cnt = 0;
int p1 = 0, p2 = 0;
while (p1 < m && p2 < n) {
if (nums1[p1] <= nums2[p2]) {
res[cnt++] = nums1[p1++];
}
else {
res[cnt++] = nums2[p2++];
}
}
while (p1 < m) res[cnt++] = nums1[p1++];
while (p2 < n) res[cnt++] = nums2[p2++];
return res;
}
时间复杂度:$\mathcal{O}(n+m)$
空间复杂度:$\mathcal{O}(n+m)$