二叉树翻转实例

article/2025/9/4 22:22:14

1.问题描述

Invert a binary tree.For example:
翻转前
to
翻转后

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.

问题来源于Leetcode

https://leetcode.com/problems/invert-binary-tree/

2.问题分析

翻转一个二叉树,直观上看,就是把二叉树的每一层左右顺序倒过来。比如问题中的例子,第三层1-3-6-9经过变换后变成了9-6-3-1,顺序反过来就对了。
再仔细观察一下,对于上面的例子,根节点(root)的左子节点及其所有的子孙节点构成根节点的左子树(left subtree),同样的,根节点(root)的右子节点及其所有的子孙节点构成根节点的右子树(right subtree)。因此翻转一个二叉树,就是把根节点的左子树翻转一下,同样的把右子树翻转一下,在交换左右子树就可以了。
左子树和右子树
当然,翻转左子树和右子树的过程和当前翻转二叉树的过程没有区别,就是递归的调用当前的函数就可以了。
因此,翻转二叉树的步骤可总结如下:

  1. 翻转根节点的左子树(递归调用当前函数)
  2. 翻转根节点的右子树(递归调用当前函数)
  3. 交换根节点的左子节点与右子节点

3.程序代码

class Solution{
public:
void exchange(TreeNode* root){TreeNode* node=root;if(node!=NULL){TreeNode* temp=node->left;node->left=node->right;node->right=temp;}
} 
TreeNode* invertTree(TreeNode* root) {TreeNode* node=root;if(root==NULL) {return root;}invertTree(node->left);//翻转左子树invertTree(node->right);//翻转右子树exchange(node);//交换左子节点与右子节点return root;
}
};

http://chatgpt.dhexx.cn/article/pKdWx2d5.shtml

相关文章

LeetCode 2415. 反转二叉树的奇数层

2415. 反转二叉树的奇数层 【DFS】这个和对称二叉树一样,也是用一个双节点参数的函数来遍历这棵二叉树,在遍历的过程中交换左右两个节点的值即可。 class Solution {// 10:57 5 // dfsvoid dfs(TreeNode left, TreeNode right, int t) {if (left null)…

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

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

二叉树反转java实现

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步 反转二叉树是数据结构中一种经典的操作。如下图所以,反转二叉树就是交换所有节点的左右子树。 具体代码实现如下&#xf…

二叉树的翻转

目录 一、题目 二、解题思路 1、二叉树翻转 2、具体步骤(迭代法) 三、代码实现 一、题目 1、leetcode链接:力扣 2、题目内容: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1&a…

一文详解反转二叉树

1 前言 LeetCode连接 根据二叉树的根节点root,反转这棵二叉树,并返回其根节点。 2 思路 总体思想是采用层序遍历《Java 一文详解二叉树的层序遍历》 【第一步】交换root的左右子节点 【第二步】交换节点7的左右子节点 【第三步】交换节点2的左右子节…

【算法笔记】反转二叉树

反转二叉树问题 翻转一棵二叉树。 示例: 输入: 输出: 问题分析 简单来说就是将每个节点的左右孩子互换,也就是遍历每一个节点然后交换它们的左右孩子,这里就可用到二叉树的各种遍历方法,只是将保存节…

【二叉树】三种方式解决翻转二叉树问题

题目描述 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 思路: 可能大家开始看都觉得很懵,但是我们要抓住这道题的本题。所谓的翻转二叉树还不如就叫交换二叉树左右子节点,说到这里是不是就很清晰了…

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

一、分析 理解递归思想的条件下很容易想到解题思路,当然可能有人会有疑问,那什么情况下知道使用递归呢,有个最简单的办法如果算法里需要重复循环用同一个思路执行得到结果,那么必然可以使用递归。进行翻转本质上可以拆分为两步递…

以太网常用接口

1.PHY层的主要作用就是将MAC层数据(MII接口数据)通过串并转换器,重新排序,并根据响应的调制方式,将信号重新编码,再通过MDI接口(介质相关接口)将数据通过对应线路传送出去。具体过程…

用计算机输入输出,计算机输入/输出接口的作用是什么

计算机输入/输出接口的作用是什么以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 计算机输入/输出接口的作用是什么 计算机输入输出接口是CPU与外部设备之间交换信息的连接电路,它们通过总线与CPU相连,简称I/O…

IO接口概念

本部分是作者在复习计算机组成原理时候参考王道视频做的笔记。 I/O接口:又称I/O控制器(I/O Controller)、设备控制器,负责协调主机与外部设备之间的数据传输。 IO接口的作用 数据缓冲:通过数据缓冲寄存器(DBR)达到主机和外设工…

EnvironmentAware接口的作用

在SpringBoot中的应用 凡注册到Spring容器内的bean,实现了EnvironmentAware接口重写setEnvironment方法后,在工程启动时可以获得application.properties的配置文件配置的属性值。 demo演示 直接上代码,比如我的application.properties文件有…

接口文档在项目中的作用

前后端合作开发的时候经常需要用到接口文档,那么接口文档在产品中究竟有什么作用?该如何去规范呢? 约束 假如你的项目中有若干前端和若干后端。你现在需要开发一个登陆接口,通常情况下这个功能一个前端和一个后端开发就足够了。…

接口的组成和作用

脑图: 什么是接口? 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互。 接口都有哪些类型…

Java序列化接口Serializable接口的作用总结

一.Java序列化接口Serializable的作用: 一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做”持久化”. 对象的默认序列化机制写入的内容是:对象的类,类签名,以及非瞬态和非静态字段的值。(因为静态static的东西在方…

serializable接口的作用是什么?

serializable接口的作用: 1、存储对象在存储介质中,以便在下次使用的时候,可以很快捷的重建一个副本; 2、便于数据传输,尤其是在远程调用的时候。 Serializable接口是启用其序列化功能的接口。实现java.io.Serializ…

Mapper 接口的如何起作用

在 MyBatis 的初始化过程中&#xff0c;每个一个 XML 映射文件中的<select />、<insert />、<update />、<delete />标签&#xff0c;会被解析成一个 MappedStatement 对像&#xff0c;对应的 id 就是 XML 映射文件配置的 namespace’.’statementId&a…

C#接口作用的深入理解

原文出处&#xff1a; 指尖流淌-吴学雷 1、C#接口的作用 C# 接口是一个让很多C#初学者容易迷糊的东西&#xff0c;用起来好像很简单&#xff0c;定义接口&#xff0c;里面包含方法&#xff0c;但没有方法具体实现的代码&#xff0c;然后在继承该接口的类里面要实现接口的所有…

java接口的作用和意义_Java接口的作用与意义

接口 1.接口的特点 首先看下面的这个抽象类代码: 抽象类代码中变量全为常量,方法全是抽象方法,这样的形式,我们可以将它们定义为接口类,书写方式如下: 接口的语法为: interface接口名{常量或方法 } 接口特点: 所有的属性都是公开静态常量所有的方法都是公开抽象方法没有…

java接口有什么用_接口有什么作用

接口的作用:1、接口可以使项目分离,所有层都面向接口开发,提高开发效率;2、接口使代码和代码之间的耦合度降低;3、接口可以多实现,多继承,并且一个类除了接口之外,还可以继承其它类。 接口的作用: 1、可以使项目分离,所有层都面向接口开发,提高开发效率; 2、接口使…