二叉树的镜像

题目:

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

二叉树的镜像

求一棵树的镜像的过程:

先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换他的两个子结点,当交换完所有的非叶子节点的左右子结点之后,就

得到树的镜像。

#include<stdio.h>
#include<stdlib.h>

struct BinaryTreeNode
{
	int      m_nValue;
	BinaryTreeNode*  m_pLeft;
	BinaryTreeNode*  m_pRight;
}; 
void mirrorRecursively(BinaryTreeNode* pNode)
{
	if((pNode==NULL)||(pNode->m_pLeft==NULL&&pNode->m_pRight))
		return ;
	BinaryTreeNode* pTemp= pNode->m_pLeft;
	pNode->m_pLeft=pNode->m_pRight;
	pNode->m_pRight=pTemp;
	
	
	if(pNode->m_pLeft)
		mirrorRecursively(pNode->m_pLeft);
	if(pNode->m_pRight)
		mirrorRecursively(pNode->m_pRight);
} 

BinaryTreeNode* createTree(BinaryTreeNode* pRoot)
{
	int data;
	scanf("%d",&data);
	
	if(data!=-1)
	{
		pRoot=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode*));
		if(pRoot==NULL)
			return NULL;
		pRoot->m_nValue=data;
		pRoot->m_pLeft=createTree(pRoot->m_pLeft);
		pRoot->m_pRight=createTree(pRoot->m_pRight);
		
		return pRoot;
	}
	return NULL;
}
void printTree(BinaryTreeNode* pNode)
{
	if(pNode==NULL)
		return ;
	printf("%d\n",pNode->m_nValue);
	printTree(pNode->m_pLeft);
	printTree(pNode->m_pRight); 
}
int main()
{
	BinaryTreeNode* pRoot;
	BinaryTreeNode* pNode=createTree(pRoot);
	
	mirrorRecursively(pNode);
	
	printTree(pNode);
	
	return 0;
}


结果:

二叉树的镜像