1 /*
2 请完成一个函数,输入一个二叉树,该函数输出它的镜像。
3 二叉树的定义如下:
4 struct BinaryTreeNode
5 {
6 int m_nValue;
7 BinaryTreeNode* m_pLeft;
8 BinaryTreeNode* m_pRight;
9 };
10 通过画图分析可以得知,求一棵树的镜像的过程:我们先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就叫唤它的两个子结点。当交换所有非叶子结点的左右子结点之后,就得到了树的镜像
11 */
2 请完成一个函数,输入一个二叉树,该函数输出它的镜像。
3 二叉树的定义如下:
4 struct BinaryTreeNode
5 {
6 int m_nValue;
7 BinaryTreeNode* m_pLeft;
8 BinaryTreeNode* m_pRight;
9 };
10 通过画图分析可以得知,求一棵树的镜像的过程:我们先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就叫唤它的两个子结点。当交换所有非叶子结点的左右子结点之后,就得到了树的镜像
11 */
12
13 void MirrorRecursively(BinaryTreeNode* pNode)
14 {
15 if(pNode == NULL) //如果当前结点为空 循环结束条件
16 return;
17
18 if(pNode->m_pLeft == NULL && pNode->m_pRight == NULL) //左右子树皆为空
19 return;
20
21 BinaryTreeNode *pTemp = pNode->m_pLeft; //交换左右子树
22 pNode->m_pLeft = pNode->m_pRight;
23 pNode->m_pRight = pTemp;
24
25 if(pNode->m_pLeft)
26 MirrorRecursively(pNode->m_pLeft); //递归调动
27
28 if(pNode->m_pRight)
29 MirrorRecursively(pNode->m_pRight);
30 }