LeetCode 1305 两棵二叉搜索树中的所有元素[dfs 归并] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1305 两棵二叉搜索树中的所有元素[dfs 归并] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
最简单的方法就是对两个二叉搜索树前序遍历,取出所有的数并排序,返回即可,代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr)
* TreeNode(int x) : val(x), left(nullptr), right(nullptr)
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right)
* ;
*/
class Solution
private:
vector<int> ans;
public:
vector<int> getAllElements(TreeNode* root1, TreeNode* root2)
dfs(root1);
dfs(root2);
sort(ans.begin(), ans.end());
return ans;
void dfs(TreeNode* root)
if(root == nullptr) return;
ans.emplace_back(root->val);
dfs(root->left);
dfs(root->right);
;
但是这种方式显然浪费了搜索二叉树的性质,重新排序的方式也不高效,使用中序遍历+归并排序的方式,可以有效减少时间复杂度,代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr)
* TreeNode(int x) : val(x), left(nullptr), right(nullptr)
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right)
* ;
*/
class Solution
public:
vector<int> getAllElements(TreeNode* root1, TreeNode* root2)
vector<int> v1, v2, ans;
mid(root1, v1);
mid(root2, v2);
merge(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(ans));
return ans;
void mid(TreeNode* root, vector<int>& v)
if(root)
if(root->left) mid(root->left, v);
v.push_back(root->val);
if(root->right) mid(root->right, v);
;
以上是关于LeetCode 1305 两棵二叉搜索树中的所有元素[dfs 归并] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
[leetcode] 1305. 两棵二叉搜索树中的所有元素 | 遍历