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

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

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

1 题目

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

2 代码


      #include "iostream"
      #include "cstdlib"
      using namespace std;
      //问题:二叉树的镜像
      typedef struct Node
      {
     	int m_nValue;
      	Node* m_pLeft;
      	Node* m_pRight;
      }BinaryTreeNode;
      //功能:利用递归方式实现打印二叉树的镜像
      //输入:
      //返回:
      void Mirror_btree(BinaryTreeNode* pNode)
      {
     	//1.回归条件1,空指针pNode(也检查参数有效性)
     	if (nullptr == pNode)
      	{
     		return ;
      	}
     	//2.回归条件2,叶子节点
     	if (nullptr == pNode->m_pLeft && nullptr == pNode->m_pRight)
      	{//
     		return ;
      	}
     	//4.至上而下,交换左右子树
      	BinaryTreeNode* pTemp = pNode->m_pLeft;
      	pNode->m_pLeft = pNode->m_pRight;
      	pNode->m_pRight = pTemp;
     	//3.进行递归调用
     	Mirror_btree(pNode->m_pLeft);
     	Mirror_btree(pNode->m_pRight);
      }
      //先序打印二叉树
      void Print_Btree(BinaryTreeNode* pNode)
      {
     	//1.回归条件1,空指针pNode(也检查参数有效性)
     	if (nullptr == pNode)
      	{
     		return ;
      	}
     	//2.打印二叉树
      	cout << pNode->m_nValue << ",";
     	//3.进行递归调用
     	Print_Btree(pNode->m_pLeft);
     	Print_Btree(pNode->m_pRight);
      }
      // ====================测试代码====================
      // 测试完全二叉树:除了叶子节点,其他节点都有两个子节点
      // 8(node1)
      // 6(node2) 10(node3)
      // 5(node4) 7(node5) 9(node6) 11(node7)
      void test01()
      {
      	BinaryTreeNode* node1  = new BinaryTreeNode();
      	BinaryTreeNode* node2  = new BinaryTreeNode();
      	BinaryTreeNode* node3  = new BinaryTreeNode();
      	BinaryTreeNode* node4  = new BinaryTreeNode();
      	BinaryTreeNode* node5  = new BinaryTreeNode();
      	BinaryTreeNode* node6  = new BinaryTreeNode();
      	BinaryTreeNode* node7  = new BinaryTreeNode();
     	//node1
      	node1->m_nValue = 8;
      	node1->m_pLeft = node2;
      	node1->m_pRight = node3;
     	//node2
      	node2->m_nValue = 6;
      	node2->m_pLeft = node4;
      	node2->m_pRight = node5;
     	//node3
      	node3->m_nValue = 10;
      	node3->m_pLeft = node6;
      	node3->m_pRight = node7;
     	//node4
      	node4->m_nValue = 5;
      	node4->m_pLeft = nullptr;
      	node4->m_pRight = nullptr;
     	//node5
      	node5->m_nValue = 7;
      	node5->m_pLeft = nullptr;
      	node5->m_pRight = nullptr;
     	//node6
      	node6->m_nValue = 9;
      	node6->m_pLeft = nullptr;
      	node6->m_pRight = nullptr;
     	//node7
      	node7->m_nValue = 11;
      	node7->m_pLeft = nullptr;
      	node7->m_pRight = nullptr;
     	//测试部分
     	Print_Btree(node1);
      	cout << endl;
     	Mirror_btree(node1);
     	Print_Btree(node1);
      	cout << endl;
     	delete node1;delete node2;
     	delete node3;delete node4;
     	delete node5;delete node6;
     	delete node7;
      }
      int main(int argc, char const *argv[])
      {
     	test01();
     	return 0;
      }
  
 

3 运行结果

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

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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