【C/C++练习题】二叉树的镜像
【摘要】
《剑指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)