二叉树的镜像

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

第一种

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

public void Mirror(TreeNode root) {
        if (root == null) {
            return;
        }
        List<TreeNode> 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<TreeNode> 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);
    }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 相关知识 二叉树的镜像定义:源二叉树 镜像二...
    echoVic阅读 846评论 1 2
  • 第一遍刷剑指offer,每一题都会把具体的思路,以及在网上寻找的优化的点,还有自己二刷三刷之后的想法分享出来。 首...
    qming_c阅读 246评论 0 0
  • 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 代码实现 主要思路 很简单的递归题,三步走:(1)特殊输入...
    _minimal阅读 144评论 0 0
  • 题目描述操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述:二叉树的镜像定义:源二叉树8/ \6 10/ \ ...
    鬼谷神奇阅读 233评论 0 0
  • 有多少路需要孤独的前行 只有自己明白努力的方向 笑声里看着鄙夷的嘴脸 听着那些无知的劝言 多少次流泪却悄悄的擦干 ...
    夜猫二阅读 752评论 0 0