求取给定的二叉树的镜像_剑指offer :二叉树的镜像

f23d1c48d122e127b58cf2a9af22af9a.png

题目描述

操作给定的二叉树,将其变换为源二叉树的镜像。

两个解法以及用例:

//方法一

//public class Solution03 {

// public static void main(String[] args) {

// TreeNode t1 = new TreeNode(8);

// TreeNode t2 = new TreeNode(6);

// TreeNode t3 = new TreeNode(10);

// TreeNode t4 = new TreeNode(5);

// TreeNode t5 = new TreeNode(7);

// TreeNode t6 = new TreeNode(9);

// TreeNode t7 = new TreeNode(11);

// t1.left=t2;

// t1.right=t3;

// t2.left=t4;

// t2.right=t5;

// t3.left=t6;

// t3.right=t7;

// Mirror(t1);

// System.out.println(t1.val);

// System.out.println(t1.left.val);

// System.out.println(t1.right.val);

// System.out.println(t2.left.val);

// System.out.println(t2.right.val);

// System.out.println(t3.left.val);

// System.out.println(t3.right.val);

//

//

// }

// public static void Mirror(TreeNode root){

// TreeNode temp;

// if(root!=null){

// temp=root.left;

// root.left=root.right;

// root.right=temp;

// }

// Mirror(root.left);

// Mirror(root.right);

// }

//}

##方法二

public class Solution03 {

public static void Mirror(TreeNode root) {

reverseTree(root);

}

private static void reverseTree(TreeNode root){

//为空则结束

if(root == null){

return;

}

//假设root两边的子树自己都已经翻转成功了,那么只需要再将左右子树互换一下就成功了

//交换root的左右子树

swap(root);

//左右子树翻转自己去处理就行了,我们规定每个子树的root都跟最终的root处理方式一样即可

reverseTree(root.left);

reverseTree(root.right);

}

private static void swap(TreeNode root){

TreeNode node = null;

node = root.left;

root.left = root.right;

root.right = node;

}

public static void main(String[] args) {

TreeNode t1 = new TreeNode(8);

TreeNode t2 = new TreeNode(6);

TreeNode t3 = new TreeNode(10);

TreeNode t4 = new TreeNode(5);

TreeNode t5 = new TreeNode(7);

TreeNode t6 = new TreeNode(9);

TreeNode t7 = new TreeNode(11);

t1.left=t2;

t1.right=t3;

t2.left=t4;

t2.right=t5;

t3.left=t6;

t3.right=t7;

Mirror(t1);

System.out.println(t1.val);

System.out.println(t1.left.val);

System.out.println(t1.right.val);

System.out.println(t2.left.val);

System.out.println(t2.right.val);

System.out.println(t3.left.val);

System.out.println(t3.right.val);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值