一、题目
————————————————
题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
————————————————
二、思路
————————————————
画图可以很清晰地得到思路:先前序遍历,对每个结点交换左右子结点。
————————————————
三、解决问题
————————————————
测试算例
1.功能测试(普通二叉树;左斜树;右斜树;一个结点)
2.特殊测试(根结点为null;)
————————————————
package swordoffer;
/**
* @author LQ
* @version 1.0
* @date 2020-04-06 14:11
*/
import java.util.ArrayList;
import java.util.LinkedList;
/**
* 请完成一个函数,输入一个二叉树,该函数输出它的镜像。
*/
public class Solution21 {
public static void main(String[] args) {
Solution21 demo = new Solution21();
System.out.println("==============================");
demo.test1();
System.out.println("==============================");
}
public void Mirror(TreeNode root) {
if(null == root){
return;
}
swap(root);
Mirror(root.left);
Mirror(root.right);
}
//左右子结点交换
private void swap(TreeNode root){
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
}
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer>list=new ArrayList<>();
if(root==null)
return list;
LinkedList<TreeNode>lay=new LinkedList<>();
lay.add(root);
while(!lay.isEmpty()){
root=lay.poll();
if(root.left!=null)
lay.add(root.left);
if(root.right!=null)
lay.add(root.right);
list.add(root.val);
}
return list;
}
//=====================测试代码=======================
/*
* 1.功能测试(A、B为普通二叉树;B是或者不是A树的子结构)
* 2.特殊测试(任意一个或者两个树的根结点为null;左斜树;右斜树)
*/
void test1() {
TreeNode root = new TreeNode(1);
root.right = new TreeNode(3);
root.left = new TreeNode(2);
System.out.println(PrintFromTopToBottom(root));
Mirror(root);
System.out.println(PrintFromTopToBottom(root));
}
}
————————————————
努力也是需要学习的,别再让你的努力,只感动了自己!愿你的每一次努力,都能为自己和别人创造价值。

京公网安备 11010502036488号