题解 | 两棵二叉搜索树中所有元素

alt

题干分析

题设给定两颗二叉搜索树,要求我们返回包含这两颗树所有节点值的升序数组。

算法思路

利用二叉搜索树中序遍历结果即为所有节点值组成的升序数组的性质,对两颗树进行中序遍历,得到各自的遍历数组,后按序合并即可。

实现代码

class Solution {
    vector<int> inOrder;

    void clear() {
        inOrder.clear();
    }
    
    void dfs(TreeNode *node) {
        if (node) {
            dfs(node->left);
            inOrder.push_back(node->val);
            dfs(node->right);
        }
    }
public:
    vector<int> getAllElements(TreeNode* root1, TreeNode* root2) {
        clear();
        dfs(root1);
        auto tmp1 = inOrder;
        int n1 = static_cast<int>(tmp1.size());
        
        clear();
        dfs(root2);
        auto tmp2 = inOrder;
        int n2 = static_cast<int>(tmp2.size());
        
        int i = 0, j = 0;
        vector<int> ans;
        while (i < n1 && j < n2) {
            if (tmp1[i] < tmp2[j]) {
                ans.push_back(tmp1[i]);
                ++i;
            } else {
                ans.push_back(tmp2[j]);
                ++j;
            }
        }
        while (i < n1) {
            ans.push_back(tmp1[i]);
            ++i;
        }
        while (j < n2) {
            ans.push_back(tmp2[j]);
            ++j;
        }
        return ans;
    }
};

复杂度分析

  • 时间复杂度:每个节点访问常数次,时间复杂度为
  • 空间复杂度:暂存数组,递归最坏,总计仍为
全部评论

相关推荐

01-24 18:29
门头沟学院 Java
一个线程安全的单例模...:在学校给mentor叫老板,在公司给老板叫mentor
我和mentor的爱恨情...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务