标签:1305 Search Elements staR1 staR2 push root1 empty root2
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]
Example 2:
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;
}
};
标签:1305,Search,Elements,staR1,staR2,push,root1,empty,root2 来源: https://www.cnblogs.com/aalan/p/15849602.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。