题目
请完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树节点的定义如下:
思路
可以先交换根节点的两个节点,就变成了下图第二个小图的模型,然后分别交换对应子节点的左右子节点,最终就可以得到我们镜像之后的二叉树了
实现
public class BinaryTreeNode {
public Object data;
public BinaryTreeNode left;
public BinaryTreeNode right;
public BinaryTreeNode() {
}
public BinaryTreeNode(Object data, BinaryTreeNode left, BinaryTreeNode right) {
this.data = data;
this.left = left;
this.right = right;
}
}
public class BinaryTree {
public static void main(String[] args) {
//模拟生成上图的二叉树
BinaryTreeNode node11 = new BinaryTreeNode("11", null, null);
BinaryTreeNode node9 = new BinaryTreeNode("9", null, null);
BinaryTreeNode node7 = new BinaryTreeNode("7", null, null);
BinaryTreeNode node5 = new BinaryTreeNode("5", null, null);
BinaryTreeNode node10 = new BinaryTreeNode("10", node9, node11);
BinaryTreeNode node6 = new BinaryTreeNode("6", node5, node7);
BinaryTreeNode node8 = new BinaryTreeNode("8", node6, node10);
BinaryTree tree = new BinaryTree();
//采用递归的方式进行前序遍历
System.out.println("-----前序遍历------");
tree.preOrder(node8);
System.out.println();
tree.mirrorRecursively(node8);
System.out.println("-----前序遍历------");
tree.preOrder(node8);
System.out.println();
}
//镜像翻转二叉树
public void mirrorRecursively(BinaryTreeNode node) {
if (node == null || (node.left == null && node.right == null)) {
return;
}
BinaryTreeNode tempNode = node.left;
node.left = node.right;
node.right = tempNode;
if (node.left != null) {
mirrorRecursively(node.left);
}
if (node.right != null) {
mirrorRecursively(node.right);
}
}
}