题目
1、题目描述
给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。
2、原题链接
解题报告
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);
}
总结
有序数组,合并可以使用归并排序来搞。