面试题27:二叉树的镜像
题目:请完成一个函数,输入一颗二叉树,该函数输出它的镜像。
二叉树定义:
public class BinaryTreeNode {
double val;
BinaryTreeNode leftNode;
BinaryTreeNode rightNode;
public BinaryTreeNode(double x) {
val = x;
}
}
思路:
过程为:遍历树的同时交换该结点的左右节点
所用的是迭代的方法,即对每个节点,交换左右结点,并如果左/右结点不为叶节点(Null)则迭代地对子节点进行交换(注意判断root是否为空,可能输入的为空树)
代码:
public class Q27 {
public static void main(String[] args) {
BinaryTreeNode myTree1 = myTree1();
System.out.println("tree1:");
printTree(myTree1);
mirror(myTree1);
System.out.println("\nmirror-tree1:");
printTree(myTree1);
}
public static void mirror(BinaryTreeNode root) {
if(root!=null) {
BinaryTreeNode temp = root.left;
root.left = root.right;
root.right = temp;
mirror(root.left);
mirror(root.right);
}
}
public static BinaryTreeNode myTree1() {
BinaryTreeNode root = new BinaryTreeNode(8);
BinaryTreeNode node8 = new BinaryTreeNode(8);
BinaryTreeNode node7 = new BinaryTreeNode(7);
root.leftNode = node8;
root.rightNode = node7;
BinaryTreeNode node9 = new BinaryTreeNode(9);
node8.leftNode = node9;
BinaryTreeNode node2 = new BinaryTreeNode(2);
node8.rightNode = node2;
BinaryTreeNode node4 = new BinaryTreeNode(4);
node2.leftNode = node4;
BinaryTreeNode node2_7 = new BinaryTreeNode(7);
node2.rightNode = node2_7;
return root;
}
// 先序打印
public static void printTree(BinaryTreeNode root) {
System.out.printf("%f ", root.val);
if(root.leftNode!=null) {
printTree(root.leftNode);
}
if(root.rightNode!=null) {
printTree(root.rightNode);
}
}
}