您的位置:首页 > 职场人生

剑指Offer 面试题27:二叉树的镜像 Java代码实现

2017-12-07 16:49 627 查看
题目:输入一个二叉树,输出该二叉树的镜像。

分析树的镜像的定义,就是前序遍历二叉树,如果存在左右子树,就交换左右节点。方便用递归实现。

public static void mirrorTree(TreeNode root){
//递归结束条件
if(root==null)
return;
if(root.left==null&&root.right==null)
return;
//必须先交换上层节点的左右子树
TreeNode temp=root.left;
root.left=root.right;
root.right=temp;

//递归翻转左右子树
if(root.left!=null){
mirrorTree(root.left);
}
if(root.right!=null){
mirrorTree(root.right);
}
}


测试下效果:

public static void main(String[] args) {
TreeNode root=new TreeNode(8);
TreeNode node1=new TreeNode(6);
TreeNode node2=new TreeNode(10);
TreeNode node3=new TreeNode(5);
TreeNode node4=new TreeNode(7);
TreeNode node5=new TreeNode(9);
root.left=node1;
root.right=node2;
node1.left=node3;
node1.right=node4;
node2.left=node5;
TreeNode.preOrderPrint(root);
mirrorTree(root);
System.out.println();
TreeNode.preOrderPrint(root);
}
preOrderPrint()是定义在树节点类中的静态方法,代码很简单:

public static void preOrderPrint(TreeNode root){
if(root==null)
return;
System.out.print(root.val+ " ");
preOrderPrint(root.left);
preOrderPrint(root.right);
}


镜像翻转前后树的前序遍历输出如下:

8 6 5 7 10 9 

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