二叉树的镜像

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

第一种

使用循环的思路,将每个结点的左右子树调换一下即可。使用递归收集所有结点。

public void Mirror(TreeNode root) {
        if (root == null) {
            return;
        }
        List list = new ArrayList<>();
        traverse(root, list);

        for (int i = 0; i < list.size(); i++) {
            TreeNode cur = list.get(i);
            TreeNode tmp = cur.left;
            cur.left = cur.right;
            cur.right = tmp;

        }
    }

    private void traverse(TreeNode node,List list) {
        if (node == null) {
            return;
        }
        list.add(node);
        traverse(node.left, list);
        traverse(node.right, list);
    }
第二种

直接使用递归,代码非常简洁。 简直不可思议。
递归这算法有点悖论的意思,就是你首先要设想Mirror这个方法已经有了将一个结点及其子树镜像的能力,然后你利用这个还不存在的实现去实现你的方法。真是神奇。

public void Mirror(TreeNode root) {
        if (root == null) {
            return;
        }
        TreeNode tmp = root.left;
        root.left = root.right;
        root.right = tmp;
        Mirror(root.left);
        Mirror(root.right);
    }

你可能感兴趣的:(二叉树的镜像)