一、题目

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

二、解题思路

先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子结点。当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。

三、解题代码

  1. public class Test {
  2. /**
  3. * 二叉树的树结点
  4. */
  5. public static class BinaryTreeNode {
  6. int value;
  7. BinaryTreeNode left;
  8. BinaryTreeNode right;
  9. }
  10. /**
  11. * 请完成一个函数,输入…个二叉树,该函数输出它的镜像
  12. *
  13. * @param node 二叉树的根结点
  14. */
  15. public static void mirror(BinaryTreeNode node) {
  16. // 如果当前结点不为空则进行操作
  17. if (node != null) {
  18. // 下面是交换结点左右两个子树
  19. BinaryTreeNode tmp = node.left;
  20. node.left = node.right;
  21. node.right = tmp;
  22. // 对结点的左右两个子树进行处理
  23. mirror(node.left);
  24. mirror(node.right);
  25. }
  26. }
  27. }