【C/C++练习题】二叉树的镜像

举报
王建峰 发表于 2021/11/19 02:13:08 2021/11/19
【摘要】 《剑指Offer》面试题27:二叉树的镜像   1 题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像。   2 代码 #include "iostream"#include "cstdlib" using namespace std; //问题:二叉树的镜像 typedef struct Node...

《剑指Offer》面试题27:二叉树的镜像

 

1 题目

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

 

2 代码


  
  1. #include "iostream"
  2. #include "cstdlib"
  3. using namespace std;
  4. //问题:二叉树的镜像
  5. typedef struct Node
  6. {
  7. int m_nValue;
  8. Node* m_pLeft;
  9. Node* m_pRight;
  10. }BinaryTreeNode;
  11. //功能:利用递归方式实现打印二叉树的镜像
  12. //输入:
  13. //返回:
  14. void Mirror_btree(BinaryTreeNode* pNode)
  15. {
  16. //1.回归条件1,空指针pNode(也检查参数有效性)
  17. if (nullptr == pNode)
  18. {
  19. return ;
  20. }
  21. //2.回归条件2,叶子节点
  22. if (nullptr == pNode->m_pLeft && nullptr == pNode->m_pRight)
  23. {//
  24. return ;
  25. }
  26. //4.至上而下,交换左右子树
  27. BinaryTreeNode* pTemp = pNode->m_pLeft;
  28. pNode->m_pLeft = pNode->m_pRight;
  29. pNode->m_pRight = pTemp;
  30. //3.进行递归调用
  31. Mirror_btree(pNode->m_pLeft);
  32. Mirror_btree(pNode->m_pRight);
  33. }
  34. //先序打印二叉树
  35. void Print_Btree(BinaryTreeNode* pNode)
  36. {
  37. //1.回归条件1,空指针pNode(也检查参数有效性)
  38. if (nullptr == pNode)
  39. {
  40. return ;
  41. }
  42. //2.打印二叉树
  43. cout << pNode->m_nValue << ",";
  44. //3.进行递归调用
  45. Print_Btree(pNode->m_pLeft);
  46. Print_Btree(pNode->m_pRight);
  47. }
  48. // ====================测试代码====================
  49. // 测试完全二叉树:除了叶子节点,其他节点都有两个子节点
  50. // 8(node1)
  51. // 6(node2) 10(node3)
  52. // 5(node4) 7(node5) 9(node6) 11(node7)
  53. void test01()
  54. {
  55. BinaryTreeNode* node1 = new BinaryTreeNode();
  56. BinaryTreeNode* node2 = new BinaryTreeNode();
  57. BinaryTreeNode* node3 = new BinaryTreeNode();
  58. BinaryTreeNode* node4 = new BinaryTreeNode();
  59. BinaryTreeNode* node5 = new BinaryTreeNode();
  60. BinaryTreeNode* node6 = new BinaryTreeNode();
  61. BinaryTreeNode* node7 = new BinaryTreeNode();
  62. //node1
  63. node1->m_nValue = 8;
  64. node1->m_pLeft = node2;
  65. node1->m_pRight = node3;
  66. //node2
  67. node2->m_nValue = 6;
  68. node2->m_pLeft = node4;
  69. node2->m_pRight = node5;
  70. //node3
  71. node3->m_nValue = 10;
  72. node3->m_pLeft = node6;
  73. node3->m_pRight = node7;
  74. //node4
  75. node4->m_nValue = 5;
  76. node4->m_pLeft = nullptr;
  77. node4->m_pRight = nullptr;
  78. //node5
  79. node5->m_nValue = 7;
  80. node5->m_pLeft = nullptr;
  81. node5->m_pRight = nullptr;
  82. //node6
  83. node6->m_nValue = 9;
  84. node6->m_pLeft = nullptr;
  85. node6->m_pRight = nullptr;
  86. //node7
  87. node7->m_nValue = 11;
  88. node7->m_pLeft = nullptr;
  89. node7->m_pRight = nullptr;
  90. //测试部分
  91. Print_Btree(node1);
  92. cout << endl;
  93. Mirror_btree(node1);
  94. Print_Btree(node1);
  95. cout << endl;
  96. delete node1;delete node2;
  97. delete node3;delete node4;
  98. delete node5;delete node6;
  99. delete node7;
  100. }
  101. int main(int argc, char const *argv[])
  102. {
  103. test01();
  104. return 0;
  105. }

 

 

3 运行结果

文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/feit2417/article/details/99195146

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。