题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。
二叉树结点定义如下:
struct BinaryNode
{
int value;
BinaryNode *left;
BinaryNode *right;
}
解答:首先要清楚什么是二叉树的镜像。
左图是一个二叉树,右图是它的镜像,其实就是照镜子一样,沿中间折叠可以完全重合。
从根节点开始,交换左右孩子结点,左右孩子结点再交换各自的孩子结点。可以递归进行。
void Mirror(BinaryNode *root)
{
if(root==NULL)
return;
if(root->left==root->right==NULL)
return;
BinaryNode *tmp;
tmp=root->left;
root->left=root->right;
root->right=tmp;
Mirror(root->left);
Mirror(root->right);
}
有关树的操作,一般可以用递归,比较容易理解。