zoukankan      html  css  js  c++  java
  • 有序输出两棵二叉查找树中的元素

    题目:给出两棵二叉查找树,有序输出所有元素,时间复杂度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.   
    9. 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. }  

  • 相关阅读:
    COLLABNET 在中文语言下无法编辑用户信息.
    安装ramdisk有可能使xp3389不能用
    关于23种设计模式的有趣见解
    成绩统计分析系统规划
    编程用开源软件或者免费软件
    ROS设置大全
    禁用TextBox自动填充autocomplete=false
    CollabNet Subversion Server安装与配置
    DbEntry查询表的使用
    BugTracker.Net设置问题
  • 原文地址:https://www.cnblogs.com/yaowen/p/4528507.html
Copyright © 2011-2022 走看看