1305. All Elements in Two Binary Search Trees

Given two binary search trees root1 and root2.

Return a list containing all the integers from both trees sorted in ascending order.

 

Example 1:

Input: root1 = [2,1,4], root2 = [1,0,3]
Output: [0,1,1,2,3,4]

Constraints:

  • Each tree has at most 5000 nodes.
  • Each node's value is between [-10^5, 10^5].

方法一:中序遍历两棵树,分别存放在数组arr1、arr2中。怎样把arr1、arr2两数组中的数按从小到大存放在res中???

 

class Solution {
private:
    void inorderTraverse(TreeNode* root,vector<int>& arr){
        if(!root) return;
        inorderTraverse(root->left,arr);
        arr.push_back(root->val);
        inorderTraverse(root->right,arr);   
    }
public:
    vector<int> getAllElements(TreeNode* root1, TreeNode* root2) {
        vector<int> arr1,arr2,res;
        inorderTraverse(root1,arr1);
        inorderTraverse(root2,arr2);
        int i=0,j=0;
        while(res.size()!=arr1.size()+arr2.size()){
            if(i==arr1.size()) res.push_back(arr2[j++]);
            else if(j==arr2.size()) res.push_back(arr1[i++]);
            else if(arr1[i]<arr2[j]) res.push_back(arr1[i++]);
            else res.push_back(arr2[j++]);
        }
        return res;
    }
};
View Code

方法二、用栈解决bst的顺序存放。从bst的根结点开始,一直往左遍历,每遍历一个结点就把它放入栈中。比较栈s1和s2栈顶元素的大小,小的(假设为root1)放入res中,,遍历root1的右子树,放入栈中,再比较s1与s2栈顶元素的大小,小的放入res中……

class Solution {
public:
    vector<int> getAllElements(TreeNode* root1, TreeNode* root2) {
       stack<TreeNode*> s1,s2;
       vector<int> res;
       while(root1||root2||!s1.empty()||!s2.empty()){
           while(root1){
               s1.push(root1);
               root1=root1->left;
           }
           while(root2){
               s2.push(root2);
               root2=root2->left;
           }
           if(s2.empty()||(!s1.empty()&&s1.top()->val<=s2.top()->val)){
               root1=s1.top();
               s1.pop();
               res.push_back(root1->val);
               root1=root1->right;
           }else{
               root2=s2.top();
               s2.pop();
               res.push_back(root2->val);
               root2=root2->right;
           }
       }
        return res;
    }
};
View Code

 

posted @ 2021-04-17 14:44  Makerr  阅读(39)  评论(0编辑  收藏  举报