36二叉树-翻转二叉树

news2024/11/15 11:49:12

目录

LeetCode之路——226. 翻转二叉树

分析

解法一:深度优先搜索

解法二:广度优先搜索

简单总结


LeetCode之路——226. 翻转二叉树

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

示例 1:

img

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

示例 2:

img

输入:root = [2,1,3]
输出:[2,3,1]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目范围在 [0, 100]

  • -100 <= Node.val <= 100

分析

简单题,关键点翻转二叉树就是交换左右子节点。

解法一:深度优先搜索
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        invertTree(root.left);
        invertTree(root.right);
        swap(root);
        return root;
    }
​
    private void swap(TreeNode root) {
        TreeNode tmp = root.left;
        root.left = root.right;
        root.right = tmp;
    }
}
  • 时间复杂度:O(n)

  • 空间复杂度:O(n)

解法二:广度优先搜索
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {return null;}
        ArrayDeque<TreeNode> deque = new ArrayDeque<>();
        deque.offer(root);
        while (!deque.isEmpty()) {
            int size = deque.size();
            while (size-- > 0) {
                TreeNode node = deque.poll();
                swap(node);
                if (node.left != null) deque.offer(node.left);
                if (node.right != null) deque.offer(node.right);
            }
        }
        return root;
    }
​
    public void swap(TreeNode root) {
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
    }
}
  • 时间复杂度:O(n)

  • 空间复杂度:O(n)

简单总结

深度优先搜索(DFS)和广度优先搜索(BFS)是两种常用的二叉树遍历算法,它们在不同的情况下有不同的使用场景。

深度优先搜索(DFS)

  1. 前序遍历(Preorder Traversal):在前序遍历中,首先访问根节点,然后递归遍历左子树,最后递归遍历右子树。DFS前序遍历常用于复制整个二叉树的结构或生成树的深度优先遍历路径。

  2. 中序遍历(Inorder Traversal):在中序遍历中,首先递归遍历左子树,然后访问根节点,最后递归遍历右子树。中序遍历常用于获取有序的二叉搜索树中的元素。

  3. 后序遍历(Postorder Traversal):在后序遍历中,首先递归遍历左子树,然后递归遍历右子树,最后访问根节点。后序遍历常用于内存回收或树的结构修改等情况。

DFS的主要优点是它对于深度优先搜索路径的处理非常方便,因为它使用递归或栈来维护路径。在查找路径或在树中寻找特定元素时,DFS通常是有用的。

广度优先搜索(BFS)

  1. 层序遍历(Level Order Traversal):BFS按层级顺序遍历树,首先访问根节点,然后逐层遍历子节点。层序遍历非常适合用于寻找树的层级结构或找到最短路径等问题。

  2. 二叉树的宽度度量:BFS可用于测量二叉树的宽度,即树的某一层上的节点数。这在某些树结构的分析和问题求解中非常有用。

BFS的主要优点是它在许多情况下能够找到最短路径,因为它从根节点开始逐层扩展,直到找到目标节点。因此,BFS常用于寻找最短路径、解决迷宫问题、查找邻近节点等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1140841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字符串中sizeof和strlen的区别

sizeof算的整个数组的大小和数据类型所占空间大小&#xff0c;strlen算的是有效字符的大小 sizeof() #include <stdio.h>int main() {char cdata[128];printf("cdata%d\n",sizeof(cdata));//计算数组大小printf("int%d\n",sizeof(int));//计算数据…

一种报警短视频录像快速检索方法

视频监控系统在家庭、园区、酒店、工地、景区、交通等领域有着重要作用&#xff0c;随着智能算法的发展尤其是深度学习在安防监控场景下的应用&#xff0c;智能分析算法已经非常准确&#xff0c;终端设备触发的报警和智能分析服务触发的报警更加的实时&#xff0c;业务场景更加…

分享8个分布式Kafka的使用场景

Kafka 最初是为海量日志处理而构建的。它保留消息直到过期&#xff0c;并让消费者按照自己的节奏提取消息。与它的前辈不同&#xff0c;Kafka 不仅仅是一个消息队列&#xff0c;它还是一个适用于各种情况的开源事件流平台。 1. 日志处理与分析 下图显示了典型的 ELK&#xff0…

运放芯片测试方法有哪些,能进行自动化测试吗?

非在线测量法&#xff1a;在集成电路未焊入电路时&#xff0c;通过测量其各引脚之间的直流电阻值与已知正常同型号集成电路各引脚之间的直流电阻值进行对比&#xff0c;以确定其是否正常。 在线测量法&#xff1a;利用电压测量法、电阻测量法及电流测量法等&#xff0c;通过在…

ab压力测试

标题相关概念 QPS&#xff0c;每秒查询 QPS&#xff1a;Queries Per Second意思是“每秒查询率”&#xff0c;是一台服务器每秒能够相应的查询次数&#xff0c;是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 互联网中&#xff0c;作为域名系统服务器的机…

MySQL:字符串中的数字、英文字符、汉字提取 Num_char_extract函数

用法 Num_char_extract(字段名,取值类型)&#xff0c;取值类型说明&#xff1a;0只取数字&#xff0c;1只取字母&#xff0c;2数字字母&#xff0c;3只取汉字 实验 以下是表里有特殊字符的这个字符串 使用Num_char_extract函数 现在我需要取出来这个字段的字母部分 可以看…

【Note详细图解】中缀表达式如何转为后缀表达式?数据结构

中缀表达式 中缀表达式&#xff08;中缀记法&#xff09;是一个通用的算术或逻辑公式表示方法&#xff0c;操作符是以中缀形式处于操作数的中间&#xff08;例&#xff1a;3 4&#xff09;&#xff0c;中缀表达式是人们常用的算术表示方法。 前缀或后缀记法不同的是&#xf…

MySQL Insert 后獲得主鍵

插入數據庫后&#xff0c;獲得主鍵。

作用域的概念及作用?作用域的分类?.js 属于哪种作用域?

目录 前言 作用域的概念及作用 作用域的分类 1. 全局作用域 2. 局部作用域 JavaScript的作用域 作用域链 闭包 总结 前言 作用域是编程语言中的一个基本概念&#xff0c;它定义了变量和函数的可访问性。了解作用域对于编写可靠和高效的代码至关重要。在JavaScript中&a…

RuoYi-Vue-SqlServer配置

项目链接 https://gitee.com/linkxs/RuoYi-Vue-SqlServerhttps://gitee.com/linkxs/RuoYi-Vue-SqlServer 服务端Eclipse编译 需要在 /ruoyi-common/pom.xml 中注释掉这些exclusion才能在Eclipse编译。实际maven编译&#xff0c;可以把这一块打开。 客户端ruoyi-ui编译 使用…

老师都在用的成绩发布系统

成绩查询系统&#xff0c;不是什么高科技&#xff0c;就是通过一些代码和Excel表格的配合&#xff0c;实现学生自主查询成绩的功能。对&#xff0c;你没听错&#xff0c;就是自主查询&#xff0c;不再需要学生一个个问老师成绩了。 先说说系统的原理吧。当老师需要发布成绩时&a…

C语言实现字符串比较

完整代码&#xff1a; /*编一个程序&#xff0c;将两个字符串 s1 和 s2 比较&#xff0c;若 s1>s2&#xff0c;输出一个正数&#xff1b;若 s1s2&#xff0c; 输出 0&#xff1b;若 s1<s2&#xff0c;输出一个负数。不要用 strcpy 函数。两个字符串用 gets 函数 读入。输…

竞赛 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

vue+iView 动态侧边栏菜单保持高亮选中

iview 组件在使用过程中&#xff0c;多多少少有一些小坑&#xff0c;本文简单罗列一二&#xff1a; 避坑指南&#xff1a; 关于iview 侧边栏菜单未能展开高亮选中回显问题 应用场景&#xff1a;iview-admin下接入动态菜单后&#xff0c;刷新或链接跳入时回显失效 简单就是两个方…

双11数码好物推荐、这几款产品很难让人拒绝

随着双11购物节的临近&#xff0c;各大电商平台纷纷推出了各种吸引人的优惠活动&#xff0c;其中数码产品备受瞩目。在如今数码产品层出不穷的时代&#xff0c;选择一款性价比高、实用性强的数码好物成为了很多人的难题。为此&#xff0c;我想向大家推荐几款绝对值得入手的数码…

C语言数据结构---时间复杂度、空间复杂度

前言 本篇文章讲解C语言的数据结构中&#xff0c;时间复杂度、空间复杂度的定义&#xff0c;以及例题说明。 详细介绍了大O渐进法和如何计算一个代码的时间复杂度和空间复杂度。最后还有一个以空间复杂度换取时间复杂度的思想。 文章目录 前言1.时间复杂度1.1 时间复杂度的概念…

首个保险“远程双录”管理办法出台!菊风持续推进金融业布局双录智能化升级

近期&#xff0c;国家金融监督管理总局宁波监管局印发《宁波保险销售行为远程同步录音录像管理暂行办法》。该《办法》充分结合考虑视频连线方式保险销售特点和线上线下融合开展保险销售中存在的各类问题&#xff0c;梳理线上化保险销售流程和风险控制要点&#xff0c;补齐线上…

将ChatGPT与物理机器人结合,波士顿动力开发了一只怪物!

10月27日&#xff0c;全球顶级机器人开发商波士顿动力&#xff08;Boston Dynamics&#xff09;在官网展示了一项新的研究&#xff0c;通过将ChatGPT、Spot以及其他AI模型相结合&#xff0c;开发了一种会说话的导游机器狗。 据悉,该机器狗能够根据文字、语音提示与人类进行交谈…

代码随想录算法训练营第三十五天 | LeetCode 435. 无重叠区间、763. 划分字母区间、56. 合并区间

代码随想录算法训练营第三十五天 | LeetCode 435. 无重叠区间、763. 划分字母区间、56. 合并区间 文章链接&#xff1a;无重叠区间 划分字母区间 合并区间 视频链接&#xff1a;无重叠区间 划分字母区间 合并区间 1. LeetCode 435. 无重叠区间 1.…

matlab Spongent算法

1、内容简介 略 5-可以交流、咨询、答疑 2、内容说明 Spongent 是一种轻量级 Hash 算法&#xff0c;其原理与“海绵”类似&#xff0c;分为“吸收” 和“榨取”两个阶段&#xff0c;所以又可以称之为“海绵结构”算法。 Hash 函数之所以有广泛的应用&#xff0c;是因为它具…