剑指Offer 面试题27:二叉树的镜像 Java代码实现
2017-12-07 16:49
627 查看
题目:输入一个二叉树,输出该二叉树的镜像。
分析树的镜像的定义,就是前序遍历二叉树,如果存在左右子树,就交换左右节点。方便用递归实现。
测试下效果:
镜像翻转前后树的前序遍历输出如下:
8 6 5 7 10 9
8 10 9 6 7 5
分析树的镜像的定义,就是前序遍历二叉树,如果存在左右子树,就交换左右节点。方便用递归实现。
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
相关文章推荐
- 剑指offer面试题7:重建二叉树 Java代码实现
- 剑指offer--面试题19:二叉树的镜像--Java实现
- 剑指Offer:面试题19——二叉树的镜像(java实现)
- 剑指Offer 面试题34:二叉树中和为某一值的路径 Java代码实现
- 剑指Offer 面试题15:二进制中1的个数 Java代码实现
- 剑指offer面试题11 数值的整数次方的Java代码实现
- 剑指offer面试题63 序列化二叉树(java实现)
- 剑指Offer:面试题23——从上往下打印二叉树(java实现)
- 剑指Offer面试题27:二叉树的镜像
- 剑指Offer 面试题32:从上到下打印二叉树 Java代码实现
- 剑指Offer面试题19(Java版):二叉树的镜像
- 剑指Offer 面试题29:顺时针打印 Java代码实现
- 剑指offer 面试题23 从上往下打印二叉树 Java实现
- 剑指Offer 面试题31:栈的压入、弹出序列 Java代码实现
- 剑指offer面试题58 二叉树的下一个节点(Java实现)
- 剑指offer面试题23:从上往下打印二叉树 Java实现
- 剑指Offer 面试题28:判断一棵二叉树是否镜对称 Java代码实现
- 剑指offer面试题java实现之题6:重建二叉树
- 剑指Offer 面试题23:链表中环的入口节点 Java代码实现
- 剑指Offer 面试题22:链表中倒数第k个节点 Java代码实现