力扣hot100-二叉树

news2024/11/16 21:28:01

文章目录

    • 概要
      • 二叉树的基本概念
      • 常见的二叉树类型
      • 常用的二叉树遍历
      • 二叉树的常用技巧
    • 题目:二叉树的中序遍历
      • 方法1--递归遍历
      • 方法2--使用栈

概要

二叉树(Binary Tree)是一种树形数据结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树在算法和计算机科学中具有广泛的应用,特别是在表达式解析、搜索算法、排序算法、优先级队列、堆和其他数据结构中。

二叉树的基本概念

  1. 节点 (Node):二叉树中的每个元素。
  2. 根节点 (Root Node):二叉树的顶端节点。
  3. 叶节点 (Leaf Node):没有子节点的节点。
  4. 子节点 (Child Node):某节点的直接后继。
  5. 父节点 (Parent Node):某节点的直接前驱。
  6. 高度 (Height):从根节点到叶节点的最长路径上的节点数。
  7. 深度 (Depth):从根节点到某节点的路径上的节点数。
  8. 层次 (Level):从根节点开始,第 1 层为根节点,其子节点为第 2 层,以此类推。

常见的二叉树类型

  1. 完全二叉树 (Complete Binary Tree):除了最后一层,其他每一层的节点都达到最大数,最后一层的节点全部集中在最左边。
  2. 满二叉树 (Full Binary Tree):每个节点要么是叶子节点,要么有两个子节点。
  3. 二叉搜索树 (Binary Search Tree, BST):对于树中的每个节点,其左子树的所有节点值小于该节点值,右子树的所有节点值大于该节点值。
  4. 平衡二叉树 (Balanced Binary Tree):左右子树的高度差不超过 1。

常用的二叉树遍历

  1. 前序遍历 (Pre-order Traversal):根节点 -> 左子树 -> 右子树。
  2. 中序遍历 (In-order Traversal):左子树 -> 根节点 -> 右子树。
  3. 后序遍历 (Post-order Traversal):左子树 -> 右子树 -> 根节点。
  4. 层次遍历 (Level-order Traversal):按层次从上到下、从左到右遍历。

二叉树的常用技巧

  1. 递归

    • 许多二叉树问题可以通过递归来解决,因为二叉树的结构天然适合递归思想。
    • 例如,求二叉树的高度可以通过递归求左右子树的高度,然后取最大值加一。
  2. 迭代

    • 使用栈或队列来模拟递归过程,实现非递归的遍历方法。
    • 例如,中序遍历可以通过显式栈来实现。
  3. 回溯

    • 回溯法常用于在树中寻找路径或解决路径问题。
    • 例如,在路径和为某一值的情况下,回溯法可以在遍历的过程中动态构建路径并回退。
  4. 动态规划

    • 在处理一些优化问题时,可以在二叉树上应用动态规划,通过存储子问题的结果来减少重复计算。
    • 例如,在二叉树上查找最长路径等问题中。
  5. 分治法

    • 将问题分解为若干子问题分别解决,然后合并子问题的结果。
    • 例如,合并两棵二叉树、构造平衡二叉树等。

题目:二叉树的中序遍历

原题链接:二叉树的中序遍历
在这里插入图片描述

方法1–递归遍历

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        inorder(root, list);
        return list;
    }

    public void inorder(TreeNode root, List<Integer> list) {
        if (root == null) return;
        inorder(root.left, list);
        list.add(root.val);
        inorder(root.right, list);
    }
}

方法2–使用栈

栈(Stack):利用栈来模拟递归的行为。栈在遍历左子树时保存节点,确保能够回到父节点,并遍历右子树。

注意栈放入顺序和取出顺序相反。后进先出

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        LinkedList<TreeNode> stack = new LinkedList<>();
        while (root != null || !stack.isEmpty()) {
            while (root != null) {
                stack.push(root);
                root = root.left;
            }
            root = stack.pop();
            list.add(root.val);
            root = root.right;
        }
        return list;
    }
}

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

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

相关文章

DC-2靶机试试看 继续打靶!!冲冲冲!!

要更改一下自己的host&#xff0c;这样才可以正确的访问我们的靶机的页面。 下面看看我的思路吧&#xff1a; 前面还是老样子&#xff0c;先发现靶机的ip地址以及收集他开放了哪些端口等等的信息 查看相对应的cms 我用了一些msf的模块没有打下来这个站点 收集相关的信息&…

【计算机人接私活】手把手教你上手挖到第一个漏洞,从底薪3k到月入过万,只有一步之遥!

计算机人想接靠谱的私活&#xff1f;看这篇&#xff01; 暑假想做兼职赚生活费&#xff1f;看这篇&#xff01; 挖漏洞找不到门路&#xff1f;看这篇&#xff01; 挖漏洞必备工具 Up入行网安多年&#xff0c;一直在探索副业项目。 从最初的月薪5k&#xff0c;到现在一个漏…

[米联客-安路飞龙DR1-FPSOC] UDP通信篇连载-01 以太网协议介绍

软件版本&#xff1a;Anlogic -TD5.9.1-DR1_ES1.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用安路(Anlogic)FPGA 实验平台&#xff1a;米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…

SpringBoot 3的两种SPI加载方式

从spring boot 2.7.0发布后&#xff0c; 自动配置类的加载方式就发生了改变&#xff0c;原来从META-INF/spring.factories文件中加载&#xff0c;变为了从META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中加载&#xff0c;对应的加载实…

Ubuntu下python3.12安装, 分布式 LLM 推理 exo 安装调试过程, 运行自己的 AI 集群

创作不易 只因热爱!! 热衷分享&#xff0c;一起成长! “你的鼓励就是我努力付出的动力” —调试有点废,文章有点长,希望大家用心看完,肯定能学废,感谢. 1. Ubuntu下python3.12安装 1.1 导入 Python 的稳定版 PPA,不用编译 sudo add-apt-repository ppa:deadsnakes/ppa sudo…

82.WEB渗透测试-信息收集-框架组件识别利用(6)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;81.WEB渗透测试-信息收集-框架组件识别利用&#xff08;5&#xff09; log4j/log4j2&…

《Excelize权威指南》新书发布

在数据洪流涌动的数字化时代&#xff0c;数据处理与分析已跃升为解锁无限洞察力的金钥匙&#xff0c;赋能商业智慧、重塑医疗健康版图、驱动教育科研创新。然而&#xff0c;当数据量级爆炸式增长&#xff0c;传统工具如 Excel 虽被誉为数据处理领域的常青树&#xff0c;其手动操…

modelsim仿真quartus IP

开发环境&#xff1a;quartus prime pro 20&#xff1b;modelsim se-64 10.6d 1. 生成Altera的IP库 使用quartus生成IP库&#xff0c;需要使用Simulation Library Compiler&#xff08;Tools->Launch Simulation Library Compiler&#xff09; 如下图操作&#xff0c;选择…

车载音频开发(一):从看懂wav开始

背景介绍&#xff1a;随着电车的发展势头迅猛&#xff0c;国内车载音频也成为电车火热宣称的势头&#xff0c;要想深入了解车载音频&#xff0c;那首先还是得从最为普通的音频文件WAV开始。 我们都知道&#xff0c;计算机只能存储数字&#xff0c;声音确实靠不同频率的波组成&a…

RabbitMQ的快速入门

目录 前言 1. 安装RabbitMQ 2.基本结构 3. RabbitMQ消息模型 ​​​​​​4. 入门案例 4.1 publisher实现 4.2 consumer实现 4.3 总结 前言 RabbitMQ是一套开源&#xff08;MPL&#xff09;的消息队列服务软件&#xff0c;是由 LShift 提供的一个 Advanced Message Q…

达梦数据库的系统视图v$cachesql

达梦数据库的系统视图v$cachesql 达梦数据库的系统视图V$CACHESQL的主要作用是提供缓冲区中SQL语句的信息&#xff0c;在 ini 参数 USE_PLN_POOL !0 时才统计。通过查询这个视图&#xff0c;用户可以了解SQL语句在缓冲区中的执行情况&#xff0c;包括SQL节点的类型、进入次数、…

滚珠丝杆与丝杆支撑座:稳定性与精度的双重保障

丝杆支撑座是连接滚珠丝杆与电机的轴承&#xff0c;采用优质的轴承能确保支撑座与滚珠丝杆之间的刚性平衡。那么&#xff0c;滚珠丝杆搭连接杆支撑座有哪些优缺点呢&#xff1f; 正常情况下&#xff0c;丝杆支撑座能够提供稳定的支撑力&#xff0c;确保滚珠丝杆在复杂工况下保持…

使用PasteSpider实现类似Jenkins的功能,让你的2G服务器也可以飞起

获取你接触过Jenkins&#xff0c;在我理解就是拉取源码&#xff0c;然后构建成镜像&#xff0c;最后启动容器&#xff01; 这个步骤你在PasteSpider上也可以实现&#xff0c;以下案例使用svn作为源码管理 如果你使用git作为源码管理&#xff0c;道理差不多 以我的代码为例 …

假期BUUCTF小练习3

文章目录 [极客大挑战 2019]BuyFlag[BJDCTF2020]Easy MD5[HCTF 2018]admin第一种方法 直接登录第二种方法 flack session伪造第三种方法Unicode欺骗 [MRCTF2020]你传你&#x1f40e;呢[护网杯 2018]easy_tornadoSSTI注入 [ZJCTF 2019]NiZhuanSiWei [极客大挑战 2019]BuyFlag 一…

好用的AI智能写作助手,创作者必备

随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;在各个领域都起到了革命性的作用。在写作领域&#xff0c;AI智能写作助手已经成为了创作者们的必备工具。这些智能助手通过强大的自然语言处理能力和深度学习算法&#xff0c;能够帮助创作者们提高写作效率、…

网络安全领域含金量最高的5大赛事,每个网安人的梦!

做网络安全一定要知道的5大赛事&#xff0c;含金量贼高&#xff0c;如果你能拿奖&#xff0c;国内大厂随你挑&#xff0c;几乎是每个有志网安人的梦&#xff01; 一、 DEF CON CTF&#xff08;DEF CON Capture the Flag&#xff09; DEF CON CTF是DEF CON黑帽大会上的一项著名…

grep工具的使用

grep [options]…… pattern [file]…… 工作方式&#xff1a; grep 在一个或者多个文件中搜索字符串模板&#xff0c;如果模板中包括空格&#xff0c;需要使用引号引起来&#xff0c;模 板后的所有字符串会被看作是文件名。 工作结果&#xff1a;如果模板搜索成功&#xf…

算法力扣刷题记录 六十三【回溯章节开篇】

前言 开始回溯章节学习。 在二叉树中预先体会了回溯。那么回溯单独来说是怎么回事&#xff1f; 一、基础知识学习 回溯基础知识参考链接 二、组合问题 2.1题目阅读 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答…

C#--DirectShowLib 关闭自动白平衡和自动曝光时间

一、前言 因项目需要需关闭相机自身的自动白平衡和自动曝光时间&#xff0c;统统设定为恒定值&#xff0c;开始实验了opencvCvSharp&#xff0c;但是不起作用&#xff0c;故实验了更底层的 DirectShowLib &#xff0c;可成功关闭相机自带的自动白平衡和自动曝光时间&#xff0c…