【剑指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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【Lucene】TokenStream-语汇单元的项、偏移量、类型和位置增量

    【Lucene】TokenStream-语汇单元的项、偏移量、类型和位置增量代码:packagecom.tan.code;importjava.io.IOException;importjava.io.StringReader;importorg.apache.lucene.analysis.Analyzer;importorg.apache.lucene.analysis.TokenStream;importorg.apache.lucene.

    2022年7月22日
    11
  • 记录搭建Hexo博客系统

    记录搭建Hexo博客系统

    2022年3月12日
    53
  • Json内容比对_json格式解析

    Json内容比对_json格式解析packageutil;importcom.jayway.jsonpath.Configuration;importcom.jayway.jsonpath.JsonPath;import

    2022年8月3日
    5
  • 在线网站技术分析工具

    在线网站技术分析工具Wappalyzer:在线网站技术分析工具Wappalyzer网站是一个可以分析不同网站所使用的各种技术的工具,对于有自身经验的网站开发者而言可以通过代码开分析网站的构架和所采用的技术,不过现在你可以通过工具来获得网站技术的参数报告了。Wappalyzer工具致支持分析目标网站所采用的平台构架、网站环境、服务器配置环境、JavaScript框架、编程语言等参数,同时

    2022年5月4日
    48
  • 嵌入式学习路线图「建议收藏」

    嵌入式学习路线图「建议收藏」可能是年前跳槽的比较多,遇到不少同学咨询到嵌入式行业发展和职业规划的问题,这里总结一下嵌入式行业的机遇和选择,希望对读者们有所帮助。我们暂且宏观上把程序员分为3类:业务类,专业类,系统类。 业务类 业务类更多的是在应用程序。随着移动互联网的快速发展出现一批UI设计师,这里的设计师是指APP的界面设计,在注重用户体验的今天对于界面的设计出现水涨船高的需求。一时间Android…

    2022年6月6日
    33
  • 四旋翼无人机飞行器基本知识(四旋翼无人机结构和原理+四轴飞行diy全套入门教程)

    第一篇《四旋翼飞行器结构和原理》第二篇《四旋翼飞行diy全套入门教程》四旋翼飞行器结构和原理1.结构形式旋翼对称分布在机体的前后、左右四个方向,四个旋翼处于同一高度平面,且四个旋翼的结构和半径都相同,四个电机对称的安装在飞行器的支架端,支架中间空间安放飞行控制计算机和外部设备。结构形式如图1.1所示。.工作原理四旋翼飞行器通过调节四个电机转速来改变旋翼转速,实现升力的变化,从而…

    2022年4月5日
    130

发表回复

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

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