题目:
请完成一个函数,输入一棵二叉树,该函数输出它的镜像。
分析:
两棵互为镜像的树,它们的根节点相同,左右两个子结点交换位置。对于这两个子结点来说,它们的两个子结点也交换了位置,这就是存在一个递归的关系。
递归结束的条件是:结点为空或者结点为叶节点。
解法:
package com.wsy;
class Tree {
private int value;
private Tree left;
private Tree right;
public Tree() {
}
public Tree(int value) {
this.value = value;
this.left = this.right = null;
}
public Tree(int value, Tree left, Tree right) {
this.value = value;
this.left = left;
this.right = right;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public Tree getLeft() {
return left;
}
public void setLeft(Tree left) {
this.left = left;
}
public Tree getRight() {
return right;
}
public void setRight(Tree right) {
this.right = right;
}
}
public class Main {
public static void main(String[] args) {
Tree A = initA();
Tree B = getMirror(A);
}
public static Tree initA() {
Tree tree1 = new Tree(8);
Tree tree2 = new Tree(6);
Tree tree3 = new Tree(10);
Tree tree4 = new Tree(5);
Tree tree5 = new Tree(7);
Tree tree6 = new Tree(9);
Tree tree7 = new Tree(11);
tree1.setLeft(tree2);
tree1.setRight(tree3);
tree2.setLeft(tree4);
tree2.setRight(tree5);
tree3.setLeft(tree6);
tree3.setRight(tree7);
return tree1;
}
public static Tree getMirror(Tree A) {
if (A == null) {
return null;
}
if (A.getLeft() == null && A.getRight() == null) {
return null;
}
Tree temp = A.getLeft();
A.setLeft(A.getRight());
A.setRight(temp);
getMirror(A.getLeft());
getMirror(A.getRight());
return A;
}
}