一、二叉树镜像的抽象描述:
关于二叉树中的镜像,用一个生活中的例子来说,就好比物体与其在镜子中的成像。
二、二叉树镜像的思路分析
二叉树的镜像就好比将二叉树的各个结点的左右子树进行交换,如下图所示:
由于二叉树是以递归的方式创建而得到,故此我们也可以以递归的方式进行二叉树镜像的建立。二叉树镜像的建立其实与二叉树的遍历大同小异,只是将其结点访问改写为对结点左右子树的交换。
三、二叉树镜像的代码实现
//二叉树的镜像
void swap(TreeNode** lchild,TreeNode** rchild){
TreeNode* tmp = *lchild;
*lchild = *rchild;
*rchild = tmp;
}
void TreeMirror(TreeNode* root){
if(root == NULL){
//空树
return;
}
swap(&(root->lchild),&(root->rchild));
TreeMirror(root->lchild);
TreeMirror(root->rchild);
}
四、代码检测
void textTreeMirror(){
printf("\n*************%s********************\n",__FUNCTION__);
TreeNode* A = CreatTreeNode('a');
TreeNode* B = CreatTreeNode('b');
TreeNode* C = CreatTreeNode('c');
TreeNode* D = CreatTreeNode('d');
A->lchild = B;
A->rchild = C;
B->lchild = D;
TreeMirror(A);
PostOrderByLoop(A);
}
结果显示: