import java.util.LinkedList;
import java.util.Queue;
public class Test19_MirrorTree
{
public static void main(String[] args)
{
//创建二叉树
TreeNode headNode1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
TreeNode node6 = new TreeNode(6);
TreeNode node7 = new TreeNode(7);
headNode1.left = node2;
headNode1.right = node3;
node2.left = node4;
node2.right = node5;
node3.left = node6;
node3.right = node7;
//镜像二叉树
mirrorTree(headNode1);
//打印二叉树
printLevelTree(headNode1);
}
private static void printLevelTree(TreeNode headNode1)
{
if(headNode1 == null){
return;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(headNode1);
System.out.println("=====镜像后层序输出结果为====");
while(!queue.isEmpty()){
TreeNode tmp = queue.poll();
System.out.print(tmp.value+" ");
//注意一下为对tmp的判断 如果用headNode1会产生错误
if(tmp.left != null){
queue.offer(tmp.left);
}
if(tmp.right != null){
queue.offer(tmp.right);
}
}
}
private static void mirrorTree(TreeNode headNode1)
{
//递归结束条件
if(headNode1 == null){
return;
}
//只有一个根节点 直接返回
if(headNode1.left == null && headNode1.right == null){
return; //不需要处理
}
//交换非叶节点的左右子节点
TreeNode tmp = headNode1.left;
headNode1.left = headNode1.right;
headNode1.right = tmp;
if(headNode1.left != null){
mirrorTree(headNode1.left);
}
if(headNode1.right != null){
mirrorTree(headNode1.right);
}
}
}
镜像二叉树并层序打印 Java实现
最新推荐文章于 2017-04-18 09:00:25 发布