您的位置:首页 > 编程语言 > Java开发

镜像二叉树并层序打印 Java实现

2017-04-05 11:59 351 查看
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);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: