跟learnjiawa一起每天一道算法编程题,既可以增强对常用API的熟悉能力,也能增强自己的编程能力和解决问题的能力。算法和数据结构,是基础中的基础,更是笔试的重中之重。
- 不积硅步,无以至千里;
- 不积小流,无以成江海。
题目描述
Java版剑指offer编程题第18题–二叉树的镜像: 操作给定的二叉树,将其变换为源二叉树的镜像。
我的想法
- 递归法解题,交换根节点的左右子树,然后分别左右递归。注意节点为空的情况即可。
解题方法1
public static void Mirror(TreeNode1 root) {
if(root == null) return;
if(root.left == null && root.right == null) return;
//交换左右子树
TreeNode1 temp;
temp = root.right;
root.right = root.left;
root.left = temp;
//左右递归
if(root.left != null){
Mirror(root.left);
}
if(root.right != null){
Mirror(root.right);
}
}
代码测试
package com.learnjiawa.jzoffer;
import javax.swing.tree.TreeNode;
/**
* @author learnjiawa
* 2019-12-17-20:32
*/
public class Solution18 {
public static void main(String[] args) {
//创建树A
TreeNode1 root1 = new TreeNode1(1);
TreeNode1 treeNode1_2 = new TreeNode1(2);
TreeNode1 treeNode1_3 = new TreeNode1(3);
TreeNode1 treeNode1_4 = new TreeNode1(4);
TreeNode1 treeNode1_5 = new TreeNode1(5);
TreeNode1 treeNode1_6 = new TreeNode1(6);
TreeNode1 treeNode1_7 = new TreeNode1(7);
root1.left = treeNode1_2;
root1.right = treeNode1_3;
treeNode1_2.left = treeNode1_4;
treeNode1_2.right = treeNode1_5;
treeNode1_3.left = treeNode1_6;
treeNode1_3.right = treeNode1_7;
System.out.println("原二叉树前序遍历:");
root1.preOrder();
Mirror(root1);
System.out.println("镜像二叉树前序遍历:");
root1.preOrder();
}
public static void Mirror(TreeNode1 root) {
if(root == null) return;
if(root.left == null && root.right == null) return;
TreeNode1 temp;
temp = root.right;
root.right = root.left;
root.left = temp;
if(root.left != null){
Mirror(root.left);
}
if(root.right != null){
Mirror(root.right);
}
}
}
//二叉树节点类
class TreeNode1 {
int val = 0;
TreeNode1 left = null;
TreeNode1 right = null;
public TreeNode1(int val) {
this.val = val;
}
//前序遍历
public void preOrder(){
System.out.println(this);
if(this.left != null){
this.left.preOrder();
}
if(this.right != null){
this.right.preOrder();
}
}
@Override
public String toString() {
return "TreeNode1{" +
"val=" + val +
'}';
}
}
代码测试控制台输出结果:
总结
二叉树的镜像,这一题还是比较简单的哦,小伙伴们可以顺便复习一下二叉树的三种遍历方式,明天见啦!
参考文献
[1]程杰. 大话数据结构. 北京:清华大学出版社, 2011.
更多
对我的文章感兴趣,点个关注是对我最大的支持,持续更新中…
关注微信公众号LearnJava: