二叉树的镜像定义:源二叉树
8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \11 9 7 5
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; public class Solution { public void Mirror(TreeNode root) { if (root == null) return; if (root.left == null && root.right == null) return; // 先序遍历每个结点,如果有子结点就交换 TreeNode temp = null; temp = root.left; root.left = root.right; root.right = temp; // 递归 if (root.left != null) Mirror(root.left); if (root.right != null) Mirror(root.right); } // 从上到下打印一棵树 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); if (root == null) { return list; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); while (!queue.isEmpty()) { TreeNode treeNode = queue.poll(); list.add(treeNode.val); if (treeNode.left != null) { queue.add(treeNode.left); } if (treeNode.right != null) { queue.add(treeNode.right); } } return list; } public static void main(String[] args) { TreeNode root = new TreeNode(8); root.left = new TreeNode(6); root.right = new TreeNode(10); root.left.left = new TreeNode(5); root.left.right = new TreeNode(7); root.right.left = new TreeNode(9); root.right.right = new TreeNode(11); Solution s = new Solution(); ArrayList<Integer> list = s.PrintFromTopToBottom(root); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i) + ","); } s.Mirror(root); System.out.println(""); System.out.print("镜像为:"); ArrayList<Integer> list1 = s.PrintFromTopToBottom(root); for (int i = 0; i < list1.size(); i++) { System.out.print(list1.get(i) + ","); } } }