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. }  

  • 相关阅读:
    基于51的串行通讯原理及协议详解(uart)
    linux下各目录的作用
    firefox插件之 vimperator 的使用
    samba的使用
    debian系统下安装ssh服务
    Aircrack-ng 工具箱
    linux系统下静态IP的设置
    HTML 与 css 的简单学习
    微软亚洲实验室一篇超过人类识别率的论文:Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification ImageNet Classification
    概率论中的一些常见的分布与公式
  • 原文地址:https://www.cnblogs.com/yaowen/p/4528507.html
Copyright © 2011-2022 走看看