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

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

  1. 题目链接:https://leetcode-cn.com/problems/all-elements-in-two-binary-search-trees/

  2. 思路:

    1. 知识点:中序遍历:先遍历左节点,在遍历根节点,最后遍历右节点
    2. 知识点:二叉搜索树:
      1. 当前结点的左子树的树小于当前节点数
      2. 当前节点的右子树的树大于当前节点数
      3. 左子树右子树自身也是二叉搜索树
    3. 将两棵树进行中序遍历,两棵树的数组就都是从大到小有序的
    4. 再将两个数组的结点进行比较加入答案数组
  3. 代码

    /**
     * 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 {
        void inorder(TreeNode *node, vector<int> &res){
            if(node){
                inorder(node -> left, res);
                res.push_back(node -> val);
                inorder(node -> right, res);
            }
        }//中序遍历
    public:
        vector<int> getAllElements(TreeNode* root1, TreeNode* root2) {
            vector<int> nums1, nums2;
            inorder(root1, nums1);
            inorder(root2,nums2);
    
            vector<int> merged;
            auto p1 = nums1.begin(), p2 = nums2.begin();
            while(true){
                if(p1 == nums1.end()){
                    merged.insert(merged.end(), p2, nums2.end());
                    break;
                }
    
                if(p2 == nums2.end()){
                    merged.insert(merged.end(), p1, nums1.end());
                    break;
            
                }
                if(*p1 < *p2){
                    merged.push_back(*p1++);
                }else{
                    merged.push_back(*p2++);
                }
            }
    
            return merged;
    
        }
    };
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值