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

题目

1、题目描述

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

2、原题链接

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

解题报告

1、解题思路

在这里插入图片描述
   ( 1 ) (1) (1) 两个数组是二叉搜索树,题目要求输出一个有序数组。
   ( 2 ) (2) (2) 二叉搜索树也是有序的,可以转成两个有序数组。
   ( 3 ) (3) (3) 不难发现这个就是归并排序的两个数组合并部分。
   ( 4 ) (4) (4) 整体思路就为:转成两个有序数组,执行归并排序。

2、解题方法

   DFS;归并排序;

2、代码详解

void dfs(TreeNode* root, vector<int> &R){
    if(root == NULL){
        return;
    }
    dfs(root->left, R);
    R.push_back(root->val);
    dfs(root->right, R);
}
vector<int> Merge(vector<int> &R1, vector<int>&R2){
    vector<int> ret;
    int i, j, k;
    int n1 = R1.size();
    int n2 = R2.size();
    for(i = 0, j = 0, k = 0; i < n1 && j < n2; ++k){
        if(R1[i] <= R2[j]){
            ret.push_back(R1[i++]);
        }else{
            ret.push_back(R2[j++]);
        }
    }
    while(i < n1) ret.push_back(R1[i++]);
    while(j < n2) ret.push_back(R2[j++]);
    return ret;
}
vector<int> getAllElements(TreeNode* root1, TreeNode* root2) {
    vector<int> R1;
    vector<int> R2;
    R1.clear();
    R2.clear();
    dfs(root1, R1);
    dfs(root2, R2);
    return Merge(R1, R2);
}

总结

   有序数组,合并可以使用归并排序来搞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值