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


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

  • 相关阅读:
    java例程练习(多态/动态绑定/迟绑定)
    java例程练习(对象转型及instanceof关键字)
    java例程练习(对象类型数据的排序)
    java例程练习(数三退一[用数组模拟])
    SSL协议与数字证书原理
    SSL和数字证书服务慨述(3)
    数字证书介绍
    SSL和数字证书服务慨述(1)
    SSL和数字证书服务慨述(2)
    如何设置word页脚中的总页码
  • 原文地址:https://www.cnblogs.com/yaowen/p/4528507.html
Copyright © 2020-2023  润新知