定义了一棵二叉树,它的镜像树就是把所有节点的左右子树全部交换位置,所以采用递归的方法,层层交换
#include <stdio.h>
#include <stdlib.h>
typedef struct BinaryTreeNode
{
int value;
struct BinaryTreeNode *leftNode;
struct BinaryTreeNode *rightNode;
}BinaryTreeNode;
//先序建立二叉树
BinaryTreeNode *creatTree_XX()
{
BinaryTreeNode *treeRoot;
int val;
printf("请输入当前节点的值,输入-1表示空节点:");
scanf("%d",&val);
if(val == -1)
{
treeRoot = NULL;
}
else
{
treeRoot = (BinaryTreeNode *)malloc(sizeof(BinaryTreeNode));
treeRoot->value = val;
printf("当前为左子树,");
treeRoot->leftNode = creatTree_XX();
printf("当前为右子树,");
treeRoot->rightNode = creatTree_XX();
}
return treeRoot;
}
void ZXBL_tree(BinaryTreeNode *treeRoot)
{
if(treeRoot == NULL)
return;
ZXBL_tree(treeRoot->leftNode);
printf("%d ",treeRoot->value);
ZXBL_tree(treeRoot->rightNode);
}
void getJingXiang(BinaryTreeNode *treeRoot)
{
if(treeRoot == NULL)
return;
if(treeRoot->leftNode == NULL && treeRoot->rightNode == NULL)
return;
BinaryTreeNode *temp = treeRoot->leftNode;
treeRoot->leftNode = treeRoot->rightNode;
treeRoot->rightNode = temp;
if(treeRoot->leftNode)
getJingXiang(treeRoot->leftNode);
if(treeRoot->rightNode)
getJingXiang(treeRoot->rightNode);
}
int main()
{
BinaryTreeNode *root = creatTree_XX();
ZXBL_tree(root);
getJingXiang(root);
ZXBL_tree(root);
return 0;
}