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

题目:输入一个二叉树,输出该二叉树的镜像。

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

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 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值