二叉树DFS

基础知识

二叉树遍历

二叉树遍历
二叉树遍历

二叉搜索树BST

二叉搜索树BST

二叉树三种深度遍历

LeetCode 94. 二叉树的中序遍历

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> ans = new ArrayList<>();
        inorder(root, ans);
        return ans;
    }
    public void inorder(TreeNode root, List<Integer> ans) {
        if ( root == null )
            return;
        inorder(root.left, ans);
        ans.add(root.val);
        inorder(root.right, ans);
    }
}

LeetCode 144. 二叉树的前序遍历

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> ans = new ArrayList<>();
        preorder(root, ans);
        return ans;
    }
    public void preorder(TreeNode root, List<Integer> ans) {
        if ( root == null )
            return;
        ans.add(root.val);
        preorder(root.left, ans);
        preorder(root.right, ans);
    }
}

LeetCode 145. 二叉树的后序遍历

class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> ans = new ArrayList<>();
        postorder(root, ans);
        return ans;
    }
    public void postorder(TreeNode root, List<Integer> ans) {
        if ( root == null )
            return;
        postorder(root.left, ans);
        postorder(root.right, ans);
        ans.add(root.val);
    }
}

从深度遍历序列还原二叉树

LeetCode 105. 从前序与中序遍历序列构造二叉树

105-左右子树
105-左子树
105-右子树

class Solution {
    // 通过哈希表把中序遍历序列中的值和顺序建立映射关系
    private Map<Integer, Integer> indexMap;

    public TreeNode buildTree(int[] preorder, int[] inorder) {
        int n = inorder.length;
        // 构造哈希映射,以中序序列中的元素值 inorder[i] 作为 key,以位置 i 作为 value,存放到哈希表中
        indexMap = new HashMap<Integer, Integer>();
        for (int i=0; i<n; i++) {
            indexMap.put(inorder[i],i);
        }
        return help(preorder, inorder, 0, n-1, 0, n-1);
    }

    public TreeNode help(int[] preorder, int[] inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right) {
        if (preorder_left > preorder_right)
            return null;
        // 前序遍历中的第一个节点就是根节点
        int preorder_root = preorder_left;
        // 在中序遍历中定位根节点
        int inorder_root = indexMap.get(preorder[preorder_root]);
        // 构建根节点
        TreeNode root =  new TreeNode(preorder[preorder_root]);
        // 左子树中的节点数目
        int size_left_subtree = inorder_root - inorder_left;
        // 递归地构造左子树,并连接到根节点
        // 先序遍历中「从 左边界+1 开始的 size_left_subtree」个元素就对应了中序遍历中「从 左边界 开始到 根节点定位-1」的元素
        root.left = help(preorder, inorder, preorder_left+1, preorder_left+size_left_subtree, inorder_left, inorder_root-1);
        // 递归地构造右子树,并连接到根节点
        // 先序遍历中「从 左边界+1+左子树节点数目 开始到 右边界」的元素就对应了中序遍历中「从 根节点定位+1 到 右边界」的元素
        root.right = help(preorder, inorder, preorder_left+size_left_subtree+1, preorder_right, inorder_root+1, inorder_right);
        return root;
    }

}

LeetCode 106. 从中序与后序遍历序列构造二叉树

class Solution {
    // 通过哈希表把中序遍历序列中的值和顺序建立映射关系
    private Map<Integer, Integer> indexMap;
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        int n = inorder.length;
        // 构造哈希映射,以中序序列中的元素值 inorder[i] 作为 key,以位置 i 作为 value,存放到哈希表中
        indexMap = new HashMap<Integer, Integer>();
        for (int i=0; i<n; i++) {
            indexMap.put(inorder[i],i);
        }
        return help(inorder, postorder, 0, n-1, 0, n-1);
    }

    public TreeNode help(int[] inorder, int[] postorder, int inorder_left, int inorder_right, int postorder_left, int postorder_right) {
        if (inorder_left > inorder_right)
            return null;
        // 后序遍历中的最后一个节点就是根节点
        int postorder_root = postorder_right;
        // 在中序遍历中定位根节点
        int inorder_root = indexMap.get(postorder[postorder_root]);
        // 构建根节点
        TreeNode root =  new TreeNode(postorder[postorder_root]);
        // 左子树中的节点数目
        int size_left_subtree = inorder_root - inorder_left;
        // 递归地构造左子树,并连接到根节点
        root.left = help(inorder, postorder, inorder_left,inorder_root-1, postorder_left, postorder_left+size_left_subtree-1);
        // 递归地构造右子树,并连接到根节点
        root.right = help(inorder, postorder, inorder_root+1, inorder_right, postorder_left+size_left_subtree, postorder_right-1);
        return root;
    }
}

二叉搜索树BST

LeetCode 700. 二叉搜索树中的搜索

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if (root == null)
            return  null;
        if (root.val == val)
            return root;
        else if ( root.val < val )
            return searchBST(root.right, val);
        else
            return searchBST(root.left, val);
    }
}

LeetCode 701. 二叉搜索树中的插入操作

class Solution {
    public TreeNode insertIntoBST(TreeNode root, int val) {
        if (root == null)
            return new TreeNode(val);
        if(val < root.val)
            root.left = insertIntoBST(root.left, val);
        else
            root.right = insertIntoBST(root.right, val);
        return root;
    }
}

LeetCode 98. 验证二叉搜索树

class Solution {
    public boolean isValidBST(TreeNode root) {
        return check(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    public boolean check(TreeNode root, long rangeLeft, long rangeRight) {
        if (root == null)
            return true;
        if (root.val<=rangeLeft || root.val>=rangeRight)
            return false;
        return check(root.left, rangeLeft, root.val) && check(root.right, root.val, rangeRight);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP

提到NVMe over Fabric&#xff0c;我就会想到它的几种应用场景&#xff1a; 1、 存储阵列到主机的网络连接&#xff08;替代FC、iSCSI等&#xff09;&#xff1b; 2、 服务器、本地NVMe存储解耦&#xff08;跨机箱/JBOF&#xff09;&#xff0c;SSD存储资源池化共享&#xff…

【基于Java Swing设计药品信息管理系统】——界面美观、功能全,可直接上手使用

一、基本功能描述 药品信息管理系统的选题背景主要是因为现今医疗行业中,药品管理和库存管理都是非常重要而复杂的工作。传统的手动记录、查询等方式耗费人力物力较多,并且容易出错。因此,采用计算机技术来帮助药品信息管理和库存管理已成为必要的趋势。 该药品信息管理系统…

【MATLAB源码-第106期】基于matlab的SAR雷达系统仿真,实现雷达目标跟踪功能,使用卡尔曼滤波算法。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 雷达系统参数设定&#xff1a; - 工作频率&#xff1a;选择一个适合的工作频率&#xff0c;例如X波段&#xff08;8-12 GHz&#xff09;。 - 脉冲重复频率&#xff08;PRF&#xff09;&#xff1a;设定一个适当的PR…

BikeDNA(六)参考数据的内在分析2

BikeDNA&#xff08;六&#xff09;参考数据的内在分析2 1.数据完整性 见链接 2.网络拓扑结构 见链接 3.网络组件 断开连接的组件不共享任何元素&#xff08;节点/边&#xff09;。 换句话说&#xff0c;不存在可以从一个断开连接的组件通向另一组件的网络路径。 如上所述…

WPF实现右键选定TreeViewItem

在WPF中&#xff0c;TreeView默认情况是不支持右键选定的&#xff0c;也就是说&#xff0c;当右键点击某节点时&#xff0c;是无法选中该节点的。当我们想在TreeViewItem中实现右键菜单时&#xff0c;往往希望在弹出菜单的同时选中该节点&#xff0c;以使得菜单针对选中的节点生…

数据结构 模拟实现二叉树(孩子表示法)

目录 一、二叉树的简单概念 &#xff08;1&#xff09;关于树的一些概念 &#xff08;2&#xff09;二叉树的一些概念及性质 定义二叉树的代码&#xff1a; 二、二叉树的方法实现 &#xff08;1&#xff09;createTree &#xff08;2&#xff09;preOrder &#xff08;…

密码学(三)

文章目录 前言一、Software Attestation Overview二、Authenticated Key Agreement三、The Role of Software Measurement 前言 本文来自 Intel SGX Explained 请参考&#xff1a; 密码学&#xff08;一&#xff09; 密码学&#xff08;二&#xff09; 一、Software Attesta…

Javascript jQuery简介

✨前言✨ 1.如果代码对您有帮助 欢迎点赞&#x1f44d;收藏⭐哟 后面如有问题可以私信评论哟&#x1f5d2;️ 2.博主后面将持续更新哟&#x1f618;&#x1f389;本章目录&#x1f389; &#x1f95d;一.jQuery简介&#x1f965;二.JQeury常用API&#x1f347;1.jQeury选择…

Eclipse插件UCdetector清理无用JAVA代码

下载插件 UCDetector - Browse /ucdetector at SourceForge.net 目前最新版本是2017年的2.0.0 保存 Eclipse/dropins 重启 操作 在项目上右键

JavaScript Web Worker用法指南

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 Web Worker可以将耗时任务放到后台执行,避免阻塞UI。本文将详细介绍Web Worker的用法,让你…

【AWS】使用亚马逊云服务器创建EC2实例

目录 前言为什么选择 Amazon EC2 云服务器搭建 Amazon EC2 云服务器注册亚马逊账号登录控制台服务器配置免费套餐预览使用 Amazon EC2 云服务器打开服务器管理界面设置服务器区域填写实例名称选择服务器系统镜像选择实例类型创建密钥对网络设置配置存储启动实例查看实例 总结 前…

基于SSM中小型医院管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

高质量训练数据助力大语言模型摆脱数据困境 | 景联文科技

目前&#xff0c;大语言模型的发展已经取得了显著的成果&#xff0c;如OpenAI的GPT系列模型、谷歌的BERT模型、百度的文心一言模型等。这些模型在文本生成、问答系统、对话生成、情感分析、摘要生成等方面都表现出了强大的能力&#xff0c;为自然语言处理领域带来了新的突破。 …

面向零信任架构的访问安全态势评估

伴随着“云大物移”等新兴 IT 技术的快速发展&#xff0c;企业数字化转型使得 IT 业务的网络环境更加复杂多样&#xff0c;企业数字资源的安全防护正面临着前所未有的压力与威胁。零信任安全架构放弃了传统基于“边界”的安全模型&#xff0c;以访问上下文的安全态势感知为基础…

jdk、tomcat、mysql的安装windows项目部署

文章目录 1、安装jdk2、tomcat安装3、MySQL安装3、外部访问数据库 1、安装jdk 1.双击运行jdk-8u144进行一个安装 2.一直点击下一步&#xff0c;到修改路径那个地方把他的存放路径改到D盘 3.找到我们刚刚修改的那个路径点进bin目录然后复制该路径进行一个环境变量配置4.找到我的…

Gogs - 管理协作者

Gogs - 管理协作者 References 仓库设置 管理协作者 权限设置 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

41k+ stars 闪电般快速的开源搜索引擎 docker安装教程

目录 1.下载 2.启动 成功示例 3.创建索引 4.插入数据 4.1下载数据 4.2插入数据 4.3查看数据 5.官方地址 1.下载 docker pull getmeili/meilisearch:latest 2.启动 mkdir -p /opt/meili_datadocker run -it --rm \-p 7700:7700 \-v /opt/meili_data:/meili_data \ge…

SAP OData(二)Association

Entity之间用Association来表示关联关系&#xff0c;可以同CDS view中的Association一起理解。 我们在上次已经建好实体Item的基础上&#xff0c;再建一个Header&#xff0c;其方法的重写也参考Item即可&#xff0c;然后开始本篇的探索。 一&#xff0c;构建Association 1.1…

数据结构——二叉树(先序、中序、后序及层次四种遍历(C语言版))超详细~ (✧∇✧) Q_Q

目录 ​​​​​​​ 二叉树的定义&#xff1a; *特殊的二叉树&#xff1a; 二叉树的性质&#xff1a; 二叉树的声明&#xff1a; 二叉树的先序遍历&#xff1a; 二叉树的中序遍历&#xff1a; 二叉树的后序遍历&#xff1a; 二叉树的层序遍历&#xff1a; 二叉树的节…

AVL树(Java)

目录 一、什么是AVL树 二、AVL树的实现 AVL树的节点 AVL树的插入 AVL树的旋转 右单旋 左单旋 左右双旋 右左双旋 AVL树的验证 三、AVL树的性能分析 一、什么是AVL树 在了解什么是AVL树之前&#xff0c;我们先回顾二叉搜索树的概念 二叉搜索树&#xff08;二叉排序…