当前位置: 首页 > news >正文

【LeetCode: 331. 验证二叉树的前序序列化 + DFS】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ DFS
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 331. 验证二叉树的前序序列化

⛲ 题目描述

序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。

在这里插入图片描述

例如,上面的二叉树可以被序列化为字符串 “9,3,4,#,#,1,#,#,2,#,6,#,#”,其中 # 代表一个空节点。

给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。

保证 每个以逗号分隔的字符或为一个整数或为一个表示 null 指针的 ‘#’ 。

你可以认为输入格式总是有效的

例如它永远不会包含两个连续的逗号,比如 “1,3” 。
注意:不允许重建树。

示例 1:

输入: preorder = “9,3,4,#,#,1,#,#,2,#,6,#,#”
输出: true
示例 2:

输入: preorder = “1,#”
输出: false
示例 3:

输入: preorder = “9,#,#,1”
输出: false

提示:

1 <= preorder.length <= 104
preorder 由以逗号 “,” 分隔的 [0,100] 范围内的整数和 “#” 组成

🌟 求解思路&实现代码&运行结果


⚡ DFS

🥦 求解思路
  1. 通过递归按照先序来遍历的顺序来遍历二叉树,顺序为根-左-右。
  2. 递归函数的返回值为以当前节点为根的整个树的结束位置,递归拿到左子树的结束位置,再根据左子树递归返回的位置,拿到右子树的结束位置。
  3. 最后,判断为根的整棵树的结束位置是否等于数组中最后一个元素的位置。
  4. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
class Solution {public boolean isValidSerialization(String preorder) {String[] arr = preorder.split(",");int index = process(arr, 0);return index == arr.length - 1 && index != -1;}public int process(String[] arr, int index) {if (index >= arr.length)return -1;if (arr[index].equals("#"))return index;int left = process(arr, index + 1);if (left == -1)return -1;int right = process(arr, left + 1);return right;}
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/328917.html

相关文章:

  • 【Consul】Linux安装Consul保姆级教程
  • pytorch常用的模块函数汇总(1)
  • 素数的计数律:Π函数、歪斜数
  • 图像识别在农业领域的应用
  • 【JavaSE】java刷题--数组练习
  • 预处理、编译、汇编、链接过程
  • 3、Cocos Creator 节点和组件
  • 【js刷题:数据结构数组篇之长度最小的子数组】
  • 大话设计模式之装饰模式
  • 国赛大纲解读
  • 设计模式(5):原型模式
  • 【React】vite + react 项目,进行配置 eslint
  • Windows入侵排查
  • C语言每日一题
  • TheMoon 恶意软件短时间感染 6,000 台华硕路由器以获取代理服务
  • 人脸68关键点与K210疲劳检测
  • 【跟着GPT4学JAVA】异常篇
  • Ubuntu上安装d4rl数据集
  • C++之STL整理(4)之set 用法(创建、赋值、增删查改)详解
  • IDEA MyBatisCodeHelper Pro最新版(持续更新)
  • sheng的学习笔记-AI-YOLO算法,目标检测
  • C# wpf 嵌入wpf控件
  • 云原生(六)、CICD - Jenkins快速入门
  • 基于java+springboot+vue实现的付费自习室管理系统(文末源码+Lw+ppt)23-400
  • 【JavaParser笔记02】JavaParser解析Java源代码中的类字段信息(javadoc注释、字段​​​​​​​名称)
  • Spring IoCDI(3)
  • 保研线性代数机器学习基础复习1
  • js绑定事件的方法
  • 是德科技keysight N9000B 信号分析仪
  • 软考 - 系统架构设计师 - 架构风格