【剑指Offer学习】【面试题19 :二叉树的镜像】[通俗易懂]

【剑指Offer学习】【面试题19 :二叉树的镜像】

大家好,又见面了,我是全栈君。

题目:请完毕一个函数,输入一个二叉树,该函数输出它的镜像。


二叉树结点的定义:

/** * 二叉树的树结点 */
public static class BinaryTreeNode {
    int value;
    BinaryTreeNode left;
    BinaryTreeNode right;
}

解题思路:

我们先前序遍历这棵树的每一个结点。假设遍历到的结点有子结点。就交换它的两个子结点。当交换全然部非叶子结点的左右子结点之后。就得到了树的镜像。

代码实现:

public class Test19 {
    /** * 二叉树的树结点 */
    public static class BinaryTreeNode {
        int value;
        BinaryTreeNode left;
        BinaryTreeNode right;
    }

    /** * 请完毕一个函数,输入…个二叉树。该函数输出它的镜像 * * @param node 二叉树的根结点 */
    public static void mirror(BinaryTreeNode node) {
        // 假设当前结点不为空则进行操作
        if (node != null) {
            // 以下是交换结点左右两个子树
            BinaryTreeNode tmp = node.left;
            node.left = node.right;
            node.right = tmp;

            // 对结点的左右两个子树进行处理
            mirror(node.left);
            mirror(node.right);
        }
    }

    public static void printTree(BinaryTreeNode node) {
        if (node != null) {
            printTree(node.left);
            System.out.print(node.value + " ");
            printTree(node.right);
        }
    }

    public static void main(String[] args) {
        // 8
        // / \
        // 6 10
        // / \ / \
        // 5 7 9 11
        BinaryTreeNode root = new BinaryTreeNode();
        root.value = 8;
        root.left = new BinaryTreeNode();
        root.left.value = 6;
        root.left.left = new BinaryTreeNode();
        root.left.left.value = 5;
        root.left.right = new BinaryTreeNode();
        root.left.right.value = 7;
        root.right = new BinaryTreeNode();
        root.right.value = 10;
        root.right.left = new BinaryTreeNode();
        root.right.left.value = 9;
        root.right.right = new BinaryTreeNode();
        root.right.right.value = 11;
        printTree(root);
        System.out.println();
        mirror(root);
        printTree(root);
        // 1
        // /
        // 3
        // /
        // 5
        // /
        // 7
        // /
        // 9
        BinaryTreeNode root2 = new BinaryTreeNode();
        root2.value = 1;
        root2.left = new BinaryTreeNode();
        root2.left.value = 3;
        root2.left.left = new BinaryTreeNode();
        root2.left.left.value = 5;
        root2.left.left.left = new BinaryTreeNode();
        root2.left.left.left.value = 7;
        root2.left.left.left.left = new BinaryTreeNode();
        root2.left.left.left.left.value = 9;
        System.out.println("\n");
        printTree(root2);
        System.out.println();
        mirror(root2);
        printTree(root2);

        // 0
        // \
        // 2
        // \
        // 4
        // \
        // 6
        // \
        // 8
        BinaryTreeNode root3 = new BinaryTreeNode();
        root3.value = 0;
        root3.right = new BinaryTreeNode();
        root3.right.value = 2;
        root3.right.right = new BinaryTreeNode();
        root3.right.right.value = 4;
        root3.right.right.right = new BinaryTreeNode();
        root3.right.right.right.value = 6;
        root3.right.right.right.right = new BinaryTreeNode();
        root3.right.right.right.right.value = 8;
        System.out.println("\n");
        printTree(root3);
        System.out.println();
        mirror(root3);
        printTree(root3);


    }
}

执行结果:

这里写图片描写叙述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115522.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 面试必备之乐观锁与悲观锁

    面试必备之乐观锁与悲观锁推荐阅读:如何在技术领域持续成长后端程序员必备的Linux基础知识后端必备——数据通信知识(RPC、消息队列)一站式总结何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为…

    2022年6月24日
    23
  • 软件工程师待遇怎么样?软件工程师薪水到底有多高?「建议收藏」

    软件工程师待遇怎么样?软件工程师薪水到底有多高?「建议收藏」随着技术不断进步,行业对软件开发技能的需求急剧上升。在此情况下,软件工程师(程序员)薪水上涨便很正常。通常来说,个人薪水是高是低,则与自身积累的经验、所处的地点以及产业分不开。据国际调研机构IDC在报告中公开的数据:2018年,全球有2230万名的软件工程师;其中,全职程序员1165万名,兼职人员635万名,非专业人员430万名。美国拥有最多的软件工程师,651017人;其次是中国,183…

    2022年9月2日
    3
  • 搭建Kubernetes集群基于calico网络插件

    搭建Kubernetes集群基于calico网络插件

    2021年6月2日
    89
  • toArray()方法使用说明「建议收藏」

    toArray()方法使用说明「建议收藏」ArrayList提供了一个将List转为数组的一个非常方便的方法toArray。toArray有两个重载的方法:1.list.toArray();2.list.toArray(T[] a);对于第一个重载方法,是将list直接转为Object[]数组;第二种方法是将list转化为你所需要类型的数组,当然我们用的时候会转化为与list内容相同的类型。

    2022年5月15日
    50
  • 卷积神经网络CNN(2)—— BN(Batch Normalization) 原理与使用过程详解[通俗易懂]

    卷积神经网络CNN(2)—— BN(Batch Normalization) 原理与使用过程详解[通俗易懂]BatchNormalization是由google提出的一种训练优化方法。网上对BN解释详细的不多,大多从原理上解释,没有说出实际使用的过程,这里从what,why,how三个角度去解释BN。

    2022年7月18日
    11
  • PHP5各个版本的新功能和新特性总结

    因为PHP那“集百家之长”的蛋疼语法,加上社区氛围不好,很多人对新版本,新特征并无兴趣。本文将会介绍自PHP5.2起,直至PHP5.6中增加的新特征本文目录:PHP5.2以前:auto

    2021年12月27日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号