题目
题目:输入一个二叉树,输出该二叉树的镜像
思路
先序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换他的子节点
java代码
package com.cv;
//定义结点
class Node{
int value;
Node leftTree;
Node rightTree;
public Node(){}
public Node(int value){
this.value = value;
this.leftTree = null;
this.rightTree = null;
}
}
public class MirrorImageTree {
public static void main(String[] args) {
Node nodeA = new Node(8);
nodeA.leftTree = new Node(8);
nodeA.leftTree.leftTree = new Node(9);
nodeA.leftTree.rightTree = new Node(2);
nodeA.rightTree = new Node(7);
Exchange(nodeA);
PrintTree(nodeA);
}
public static void Exchange(Node node){
if(node == null){
return;
}
if(node.leftTree == null && node.rightTree == null){
return;
}
// 交换左右两个节点
Node temp = node.leftTree;
node.leftTree = node.rightTree;
node.rightTree = temp;
//判断左节点是否为空,如果为空就不用交换,否则继续交换他的两个子节点
if(node.leftTree != null){
Exchange(node.leftTree);
}
//判断右节点是否为空,如果为空就不用交换,否则继续交换他的两个子节点
if(node.rightTree != null){
Exchange(node.rightTree);
}
}
//按前序遍历输出镜像之后的二叉树
public static void PrintTree(Node root){
if(root == null){
return;
}
System.out.print(root.value + " ");
PrintTree(root.leftTree);
PrintTree(root.rightTree);
}
}