有序输出两棵二叉查找树中的元素

题目:给出两棵二叉查找树,有序输出所有元素,时间复杂度O(n),空间复杂度O(h),h为树的高度

此题就是把两棵二叉查找树的中序遍历过程结合在一起。

  1. struct TreeNode
  2. {
  3. int val;
  4. TreeNode *left;
  5. TreeNode *right;
  6. TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  7. };
  8. void print2BSTsInSortedOrder(TreeNode *root1, TreeNode *root2)

10. {

  1. 11.     stack<TreeNode *> stk1, stk2;
  2. 12.     TreeNode *p1 = root1;
  3. 13.     while(p1)
  4. 14.     {
  5. 15.         stk1.push(p1);
  6. 16.         p1 = p1->left;  //最小节点
  7. 17.     }
  8. 18.     TreeNode *p2 = root2;
  9. 19.     while(p2 != NULL)
  10. 20.     {
  11. 21.         stk2.push(p2);
  12. 22.         p2 = p2->left;  //最小节点
  13. 23.     }
  14. 24.     while(!stk1.empty() || !stk2.empty())
  15. 25.     {
  16. 26.         if(!stk1.empty())
  17. 27.             p1 = stk1.top();
  18. 28.         if(!stk2.empty())
  19. 29.             p2 = stk2.top();
  20. 30.         if(p1 == NULL || (p2 && p2->val <= p1->val))
  21. 31.         {
  22. 32.             printf("%d ", p2->val);
  23. 33.             stk2.pop();
  24. 34.               //获取p2节点的下一个节点,右节点的最左节点,加入栈中,下次从栈中弹出的就是下一个节点
  25. 35.             p2 = p2->right;
  26. 36.             while(p2 != NULL)
  27. 37.             {
  28. 38.                 stk2.push(p2);
  29. 39.                 p2 = p2->left;
  30. 40.             }
  31. 41.         }
  32. 42.         else if(p2 == NULL || (p1 && p1->val <= p2->val))
  33. 43.         {
  34. 44.             printf("%d ", p1->val);
  35. 45.             stk1.pop();
  36. //获取p1节点的下一个节点,右节点的最左节点,加入栈中,下次从栈中弹出的就是下一个节点
  37. 46.             p1 = p1->right;
  38. 47.             while(p1)
  39. 48.             {
  40. 49.                 stk1.push(p1);
  41. 50.                 p1 = p1->left;
  42. 51.             }
  43. 52.         }
  44. 53.     }

54. }

时间: 2024-10-24 11:04:27

有序输出两棵二叉查找树中的元素的相关文章

Java比较两个数组中的元素是否相同的最简单方法

呵呵呵,实现Java比较两个数组中的元素是否相同的功能你是怎么做的?看下面最简单方法: import java.util.Arrays; public class Test { /** * Java比较两个数组中的元素是否相同 */ public static void main(String[] args) { String [] array1 = {"1","2","3"}; String [] array2 = {"3"

Java对数组的操作(三)—比較两个数组中的元素是否同样的最简单方法

呵呵呵,实现Java比較两个数组中的元素是否同样的功能你是怎么做的?看以下最简单方法: import java.util.Arrays; public class Test { /**                 * Java比較两个数组中的元素是否同样                 */                public static void main(String[] args) {                        String [] array1 = {"1

说明如何用一个数组A[1...n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢。注意PUSH和POP操作的时间应为O(1)。

校招开始了,发现自己数据结构,Algorithms的知识都还给老师了.喵了个呜的! <算法导论>开啃吧~ 从第三章数据结构开始吧~ 10.1-2 : 如何用一个数组A[1...n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢.注意PUSH和POP操作的时间应为O(1). 解:思想是,建一维数组,两个栈stack1和stack2分别从数组A[0]和A[N-1]开始push,栈指针相遇时,两个栈中元素总数为n. 在思考怎么用java 实现,晚些时候 上代码吧~

PHP实现查询两个数组中不同元素的方法

以下实例讲述了PHP实现查询两个数组中不同元素的方法.分享给大家供大家参考,具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 <?php   $a = array(   "max_allow_dialogs",   "livechat_server_ip",   "livechat_servic

提取两个数组中不同元素

假设数组: string[] listA ={"1","2","3","4","5"}; string[] listB = {"1","4","5"}; 那么,提取两个数组中不同的元素放到另一个数组中:代码如下: string[] result = listA.Except(listB).Union(listB.Except(listB)).ToA

两个字符串中不同元素的个数

输入字符串长度len1,字符串s1,字符串长度len2,字符串s2.从后向前比较,以最短字符串为标准,输出不同的元素的个数. 例如:  输入:s1="1,3,5"   len1=3        s2="2,4,1,7,5"   len2=5 输出:2 函数原型 public int getDiffNum(int len1, String s1, int len2, String s2)

链表 | 将递增有序的两个链表的公共元素合并为新的链表

王道P38T14 主代码: LinkList common_subList(LinkList &A,LinkList &B){ LNode *C=new LNode,*pC=C; C->next=NULL; LNode* pA=A->next,*pB=B->next; while(pA!=NULL && pB!=NULL){ if(pA->data < pB->data){ pA=pA->next; }else if(pA->

统计两个数组中相同元素的个数

import numpy as np import tensorflow as tf A = [1,3,4,5,6,1,2,3,4,5] B = [1,3,4,3,2,2,2,3,4,3] with tf.Session() as sess: a=sess.run(tf.equal(A, B)) b=a.tolist().count(True) print(a.tolist()) print(b) 原文地址:https://www.cnblogs.com/Ann21/p/11107864.htm

C语言:返回两个数组中第一个元素的指针,并输出这个值

// //  main.c //  Pointer_search // //  Created by ma c on 15/8/2. //  Copyright (c) 2015年 bjsxt. All rights reserved. //  要求:通过指针查找,实现比较两个有序数组中的元素,输出两个数组中的第一个相同的元素值. #include <stdio.h> int *searchSameElement(int *a,int *b,int len1,int len2); int ma