LeetCode 1305. 两棵二叉搜索树中的所有元素(二叉树迭代器)

1. 题目

给你 root1 和 root2 这两棵二叉搜索树

请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.

提示:
每棵树最多有 5000 个节点。
每个节点的值在 [-105, 105] 之间。

2. 二叉树迭代器

按照中序迭代,比较两个迭代器的值val

类似题目:LeetCode 653. 两数之和 IV - 输入 BST

class Solution {
	TreeNode *r1, *r2;
	stack<TreeNode*> s1, s2;
	TreeNode *n1, *n2;
public:
    vector<int> getAllElements(TreeNode* root1, TreeNode* root2) {
        r1 = root1;
        r2 = root2;
        vector<int> ans;
        TreeNode *cur1 = iterator1(), *cur2 = iterator2();
        while(cur1 || cur2)
        {
        	if(cur1 && !cur2)
        	{
        		ans.push_back(cur1->val);
        		cur1 = iterator1();
        	}
        	else if(!cur1 && cur2)
        	{
        		ans.push_back(cur2->val);
        		cur2 = iterator2();
        	}
        	else
        	{
        		if(cur1->val <= cur2->val)
        		{
        			ans.push_back(cur1->val);
        			cur1 = iterator1();
        		}
        		else
        		{
        			ans.push_back(cur2->val);
        			cur2 = iterator2();
        		}
        	}
        }
        return ans;
    }

    TreeNode* iterator1()//迭代器
    {
    	while(r1 || !s1.empty())
    	{
    		while(r1)
    		{
    			s1.push(r1);
    			r1 = r1->left;
    		}
    		n1 = s1.top();
    		s1.pop();
    		r1 = n1->right;
    		return n1;
    	}
    	return NULL;
    }

    TreeNode* iterator2()//迭代器
    {
    	while(r2 || !s2.empty())
    	{
    		while(r2)
    		{
    			s2.push(r2);
    			r2 = r2->left;
    		}
    		n2 = s2.top();
    		s2.pop();
    		r2 = n2->right;
    		return n2;
    	}
    	return NULL;
    }
};

在这里插入图片描述

发布了587 篇原创文章 · 获赞 454 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_21201267/article/details/103773511