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. 两棵二叉搜索树中的所有元素 | 遍历

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

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

LeetCode 1305 两棵二叉搜索树中的所有元素[dfs 归并] HERODING的LeetCode之路

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

LeetCode 908. 最小差值 I / 1305. 两棵二叉搜索树中的所有元素 / 591. 标签验证器