玩命加载中 . . .

1305-两棵二叉搜索树中的所有元素


LeetCode 1305. 两棵二叉搜索树中的所有元素

给你 root1root2 这两棵二叉搜索树。请你返回一个列表,其中包含两棵树中的所有整数并按升序排序。

示例 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)$


文章作者: kunpeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 kunpeng !
  目录