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

简介:

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

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



本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4528507.html,如需转载请自行联系原作者

相关文章
kde
|
15天前
|
JSON Linux 数据格式
Docker镜像加速指南:手把手教你配置国内镜像源
配置国内镜像源可大幅提升 Docker 拉取速度,解决访问 Docker Hub 缓慢问题。本文详解 Linux、Docker Desktop 配置方法,并提供测速对比与常见问题解答,附最新可用镜像源列表,助力高效开发部署。
kde
9351 76
|
12天前
typora免费版,激活方法,Typora使用教程
Typora是一款简洁高效的Markdown编辑器,支持即时渲染。本教程涵盖安装方法、文件操作、视图控制、格式排版、字体样式及Markdown语法,助你快速上手使用Typora进行高效写作。
2388 6
|
5天前
|
云安全 人工智能 安全
|
18天前
|
人工智能 定位技术 API
Dify MCP 保姆级教程来了!
大语言模型,例如 DeepSeek,如果不能联网、不能操作外部工具,只能是聊天机器人。除了聊天没什么可做的。
2252 34
|
6天前
|
Ubuntu JavaScript Linux
Windows安装Claude Code
Claude Code 是 Anthropic 推出的代码助手,支持在 Windows 通过 WSL(Windows Subsystem for Linux)运行。本文介绍如何在 Windows 系统中启用 WSL、安装 Ubuntu 子系统、配置 Python 与 Node.js 环境,并最终安装和运行 Claude Code。内容涵盖 WSL 设置、开发工具安装、依赖配置及常见问题解决方法,助你顺利在本地环境中使用 Claude Code 提升编码效率。
592 1
Windows安装Claude Code
|
15天前
|
JavaScript Ubuntu IDE
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
1251 6
|
13天前
|
人工智能 Java Spring
【保姆级图文详解】大模型、Spring AI编程调用大模型
【保姆级图文详解】大模型、Spring AI编程调用大模型
872 11
【保姆级图文详解】大模型、Spring AI编程调用大模型
|
5天前
|
人工智能 Java API
让复杂 AI 应用构建就像搭积木:Spring AI Alibaba Graph 使用指南与源码解读
通过指南和完整的示例项目,你可以快速掌握 Spring AI Alibaba Graph 的使用方法,并在实际项目中高效地构建智能化应用。
362 14