【leetcode】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:

【leetcode】1305. All Elements in Two Binary Search Trees 二叉搜索树

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

Example 2:

【leetcode】1305. All Elements in Two Binary Search Trees 二叉搜索树

Input: root1 = [1,null,8], root2 = [8,1]
Output: [1,1,8,8]

   这道题基本解法是分别遍历这两个BST,得到两个arr,然后拼接之后在进行排序,输出递增的arr。但这样并没有利用到BST的特点,bst中最小的元素应该在左子树上,按照大佬的解法,可以用栈先存储所有的左子树,然后从底层往顶层检索。


class Solution {
public:
    vector<int> getAllElements(TreeNode* root1, TreeNode* root2) {
        vector<int>vecRes;
        stack<TreeNode*> staR1,staR2;
        // bst 左子树的节点的值都小于根节点
        while(root1 ||  root2 || !staR1.empty() || !staR2.empty()){
            
            while(root1){
                staR1.push(root1);
                root1=root1->left;
            }
            while(root2){
                staR2.push(root2);
                root2=root2->left;
            }
            if(staR2.empty()|| (!staR1.empty() && staR1.top()->val<=staR2.top()->val)){
                root1=staR1.top();
                staR1.pop(); // pop smallest element in this stack
                vecRes.push_back(root1->val);
                root1=root1->right;
            }
            else{
                root2=staR2.top();
                staR2.pop();
                vecRes.push_back(root2->val);
                root2=root2->right;
            }
        }
        return vecRes;
        
    }
};

 

上一篇:DPU(Data Processing Unit)数据处理器


下一篇:另一棵树的子树(LeetCode)