一文详解反转二叉树

二叉树反转 二叉树反转 二叉树反转常被拿来做面试题,所以掌握它是一件必须的事。 下图是二叉树的反转,看起来就像是镜像一样。 首先我们先要构建二叉树的类型 #include <iostream> using namespace std; typedef char ElemType; typedef struct node { ElemType data; //数据域 struct node* left; struct node* right; //结点的左右子树指针 } BTNode; // 阅读详情

1 前言 

LeetCode连接

根据二叉树的根节点root,反转这棵二叉树,并返回其根节点。

 

 2 思路

总体思想是采用层序遍历《Java 一文详解二叉树的层序遍历》

【第一步】交换root的左右子节点

 【第二步】交换节点7的左右子节点

 【第三步】交换节点2的左右子节点

package cn.msf.tree;

import javax.xml.namespace.QName;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

import static cn.msf.tree.LevelTraversal.levelPrint;

/**
 * @author : msf
 * @date : 2022/12/6
 */
public class InvertTree {
    public static void main(String[] args) {
        TreeNode root = new TreeNode(1);
        TreeNode node1 = new TreeNode(2);
        TreeNode node2 = new TreeNode(3);
        TreeNode node3 = new TreeNode(4);
        TreeNode node4 = new TreeNode(5);
        TreeNode node5 = new TreeNode(6);
        TreeNode node6 = new TreeNode(7);

        root.left = node1;
        root.right = node2;
        node1.left = node3;
        node1.right = node4;
        node2.left = node5;
        node2.right = node6;
        System.out.println("反转前 二叉树的层序遍历结果");
        List<ArrayList<Integer>> arrayLists = levelPrint(root);
        for (ArrayList<Integer> arrayList : arrayLists) {
            System.out.println(arrayList);
        }
        InvertTree tree = new InvertTree();
        root = tree.invertTree(root);
        System.out.println("反转后 二叉树的层序遍历结果");
        arrayLists  = levelPrint(root);
        for (ArrayList<Integer> arrayList : arrayLists) {
            System.out.println(arrayList);
        }
    }

    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        Deque<TreeNode> queue = new ArrayDeque<>();
        queue.addLast(root);
        while (!queue.isEmpty()) {
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.removeFirst();
                if (node.left != null) {
                    queue.addLast(node.left);
                }
                if (node.right != null) {
                    queue.addLast(node.right);
                }
                if(node.left != null || node.right !=null) {
                    TreeNode temp = node.left;
                    node.left = node.right;
                    node.right = temp;
                }
            }
        }
        return root;
    }
}

上述代码执行结果:

 

L2-011 玩转二叉树 L2-011玩转二叉树(25分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。 输出格式: ... 阅读详情

相关推荐

问题 C: DS二叉树—二叉树镜面反转

题目描述 假设二叉树用二叉链表存储,用先序序列结果创建。输入二叉树的先序序列,请你先创建二叉树,并对树做个镜面反转,再输出反转后的二叉树的先序遍历、中序遍历、后序遍历和层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。 输入 测试次数t 每组测试数据是一个二叉树的先序遍历序列,#表示空树 输出 对每棵二叉树,输出镜面反转后的先序、中序、后序和层次遍历序列。如果空树,输出四个NULL(后面不加空格)。如下: NULL NULL NULL NULL 样...

m0_52258325的博客 589

【数据结构】翻转二叉树的三种方式

什么是反转二叉树 反转二叉树的实现方式 方式一:使用栈实现 方式二:使用堆实现 方式三:使用递归来实现

✈ 正在努力 の 寒江(StudiousTiger) ✌ 呐 ✈ 5273

问题 D: DS二叉树—二叉树镜面反转

题目描述 假设二叉树用二叉链表存储,用先序序列结果创建。输入二叉树的先序序列,请你先创建二叉树,并对树做个镜面反转,再输出反转后的二叉树的先序遍历、中序遍历、后序遍历和层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。 --程序要求-- 若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio 程序中若include多过一个头文件,不看代码,作0分处理 不允许使用第三方对象或函数实现本题的要求 输入 测试次

qq_50065237的博客 1668

翻转二叉树(LeetCode 226)

二叉树翻转是一道经典的面试编程题,经常出现在各大公司的招聘笔试面试环节。这里还有个趣事,Homebrew的作者Max Howell某天去 Google 面试,面试官出了一道翻转二叉树的题目,然而 Max Howell 没答上来,结果被拒。面试官的评语是:“我们 90% 的工程师使用您编写的软件,但是您却无法在面试时在白板上写出翻转二叉树这道题,所以滚蛋吧”。可见,在求职面试过程中,即使你是一位优秀的程序员,如果答不上算法题,那么在算法方面的能力将被面试官认为是不及格的,甚至无法被聘用。

Doublelv 的博客专栏。 3221

算法-树-反转二叉树

问题 Write a function that takes in a Binary Tree and inverts it. In other words, the function should swap every left node in the tree for its corresponding (mirrored) right node. Each Binary Tree node has a value stored in a property called “value” and two

uncle_ll的博客 1385

C/C++ 反转二叉树的递归和迭代算法详解及源码

递归算法的优点是简洁、易于理解和实现。但是递归算法可能会导致栈溢出,因为反转二叉树的深度可能很大。迭代算法的优点是不需要使用递归,因此不存在栈溢出的问题。然而,迭代算法的实现相对复杂一些。反转二叉树是将二叉树的左右子树交换位置的操作。递归和迭代是两种常见的解决方法。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 2619

反转二叉树

https://blog.youkuaiyun.com/qq_31692013/article/details/82381671 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * Tr...

z69183787的专栏 725

Quartus II设计程序计数器PC、由PC产生ROM的地址(含仿真)

设计程序计数器PC,正常工作模式下,系统启动,设置PC的初始值,之后每来一个clk,PC的输出值应该增加1;当程序发生跳转时,PC的值应该发生改变,级将跳转的地址值赋进行输出。PC后端连接一个ROM,由PC来产生ROM的地址,仿真进行验证。

m0_73700621的博客 1815

你能在白板上写出如何反转一棵二叉树吗?

技术招聘已经变味了: Homebrew 作者 Max Howell 面试谷歌被拒为例。谷歌说他们有 90% 的员工使用了 Max 开发的 Homebrew,但因为在面试时 Max 没能在白板上写出如何反转一颗二叉树而被拒。 题目描述 题解 其实就是交换一下左右节点,然后再递归的交换左节点,右节点 根据动画图我们可以总结出递归的两个条件如下: 终止条件:当前节点为null...

AI天才研究院 9475

基于知识图谱的旅游推荐系统

这一系统整合了当今先进的数据技术:采集携程等大型平台的景点数据,通过爬虫技术源源不断地获取最新的旅游信息。此外,我们采用Neo4j图数据库来存储和处理这些数据,结合自然语言处理技术,为你提供精准的旅游建议。:通过直观的知识图谱展示,了解各个景点之间微妙的联系,无论是文化背景还是地理方位,你都能从中发现新的旅行灵感。准备毕业设计的同学,关注我们,这是一个集成了多种前沿技术的项目,为你的学术成果锦上添花。:不再浪费时间,系统根据你的偏好和历史评分,利用协同过滤技术推荐适合的旅游目的地。

qalangtao的博客-qalangtao.com 773

Adams中AKISPL和DX函数的妙用:打造精准的非线性衬套模型

本文深入探讨了在Adams动力学软件中,如何巧妙运用AKISPL插值函数与DX等位移测量函数,构建高精度的非线性衬套模型。文章通过实战案例,详细解析了从单轴非线性刚度到完整六自由度耦合模型的实现步骤与调试技巧,帮助工程师将复杂的实验或有限元数据转化为可靠的多体动力学仿真模型,有效提升系统仿真置信度。

sky77的博客 318

图算法之如何反转一颗二叉树

一个题目难倒一个英雄好汉。这个题目曾让Homebrew的作者失去了一次进入Google工作的机会。在这里,我们不讨论是非,只聊技术!我个人认为,算法和数据结构还是要懂一点的。因为算法和数据结构不仅能解决我们在写程序的时候遇到的性能问题,而且还能扩展我们解决问题的方法。 问题的简单描述:反转一颗二叉树。什么是二叉树呢?二叉树就是每个节点最多有两个子树的树。通常,子树被称为“左子树”

何旭东chucai的专栏 4195

CentOS7 安装天气分型软件cost733过程详解

cost733是一款天气分型软件,其内置的一些算法可以帮助气象工作者进行天气类型划分等(我也是初学者,仅仅知道一些皮毛),但是网上找到的安装办法比较少,并且总会出现一些报错,试了一晚上,终于将安装办法调通了,希望可以帮助到大家

weixin_62573024的博客 3562

二叉树的中序遍历、两数之和、整数反转

1、LeetCode 94.二叉树的中序遍历 题目:给定一个二叉树的根节点root,返回它的中序遍历。 2、大神解法 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * ...

学Java,找哪吒 4572

Sparse-ICP—(4) 加权稀疏迭代最近点算法(matlab版)

本文介绍了加权稀疏迭代最近点算法的实现。

点云侠的博客 642

Navicat从入门到精通:数据库管理全攻略

本文系统梳理Navicat数据库管理工具的核心应用体系。从基础的安装与多类型数据库连接入手,详解数据库与数据表的创建、修改、删除等操作逻辑;深入数据增删改查的可视化与 SQL 语句双重操作模式,结合Excel/SQL文件的导入导出场景提供实操指南。同时覆盖数据备份恢复、跨库同步等进阶功能,以及视图、存储过程等高级应用。通过对比同类工具突出Navicat的易用性与功能性优势,并针对连接失败、字符乱码等常见问题提供解决方案,帮助读者从零基础掌握数据库全生命周期管理,提升数据操作效率与安全性。

邓邓子的博客 1897

先由前序和中序确定二叉树,然后再反转二叉树

(选做题)给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。 输出格式: 在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔...

chstor's blog 2332

Oracle EBS与SAP数据数据切换至迁移华为MetaERP分析

Oracle EBS到华为MetaERP的数据迁移可采用“表对表复制”思路,因其模块化设计下数据模型标准化、边界清晰。核心业务对象存储在结构明确的主表中,与MetaERP模型兼容度高,便于直接映射。而SAP到MetaERP的迁移则因SAP高度优化的复杂表结构(如簇表/池表)、数据分散冗余、深度依赖配置等特点,无法简单复制,必须采用基于业务对象的迁移方法,通过视图/BAPI提取数据并进行深度转换。两种迁移的本质差异源于源系统的数据模型设计理念不同。

金牌架构师 1379

DS二叉树—二叉树镜面反转

输入二叉树的先序序列,请你先创建二叉树,并对树做个镜面反转,再输出反转后的二叉树的先序遍历、中序遍历、后序遍历和层序遍历的序列。对每棵二叉树,输出镜面反转后的先序、中序、后序和层次遍历序列。void LevelOrder(TNode* t) { //用数组取代队列的层次遍历。程序中若include多过一个头文件,不看代码,作0分处理 不允许使用第三方对象或函数实现本题的要求。void hou(TNode*T) { //后续遍历。void xian(TNode *T) { //前序遍历。

hanhan668的博客 179

【教程4>第2章>第19节】 GMSK解调系统的FPGA开发与matlab对比验证

MSK(Minimum Shift Keying,最小频移键控)和GMSK(Gaussian Minimum Shift Keying,高斯最小频移键控)都是数字调制技术,主要用于无线通信系统中将数字信号转换为模拟信号进行传输。它们都是连续相位移键控(Continuous Phase Shift Keying, CPK)的一种形式,意味着相邻码元之间没有相位跳变的突变,而是连续过渡,这有助于减少信号带宽和降低邻道干扰。GMSK的解调过程与MSK类似,我们这里还是采用和MSK解调一样的1bit解调方法。

FPGA/MATLAB学习教程/源码/项目合作开发 1221

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

反转二叉树(二叉树的镜像)

输入一个二叉树,输出其镜像。     如下图,即交换所有节点的左右子树。     这里提供两种思路:使用递归和不使用递归。     使用的二叉树定义如下: public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public Tr

心若无尘 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

二叉树的镜像(反转二叉树)

反转二叉树----java实现 描述 实现二叉树的反转 示例: 原二叉树: 4 / \ 2 7 / \ / \ 1 3 6 9 反转后的二叉树: 4 / \ 7 2 / \ / \ 9 6 3 1 解析 递归 1.判断根是否为空,根为空直接返回根;否则继续;2....

331

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

代码随想录day15:二叉树02(反转二叉树,对称二叉树,最大深度,最小深度)

当我们在做二叉树问题时,我们一定要想好要用前中后序遍历还是层序遍历。二叉树问题的大忌就是自己稀里糊涂的过了,但是不知道自己是哪种遍历方法。

weixin_61013372的博客 1030
上一篇: Java并发-实现带拒绝策略的线程池
下一篇: 一文详解二叉树是否对称
兜兜转转m
博客等级 码龄8年 2443粉丝 264原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兜兜转转m

一毛钱助力博主实现愿望

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值