二叉树(纲领篇)

news/2024/7/20 22:00:59 标签: leetcode, 深度优先, 算法

文档阅读

文档阅读

二叉树解题的思维模式分两类:

1、是否可以通过遍历一遍二叉树得到答案?如果可以,用一个 traverse 函数配合外部变量来实现,这叫「遍历」的思维模式。

2、是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。

无论使用哪种思维模式,你都需要思考:

如果单独抽出一个二叉树节点,它需要做什么事情?需要在什么时候(前/中/后序位置)做?其他的节点不用你操心,递归函数会帮你在所有节点上执行相同的操作。

题目

104. 二叉树的最大深度

https://leetcode.cn/problems/maximum-depth-of-binary-tree/

class Solution {
    public int maxDepth(TreeNode root) {
        if(root == null) return 0;
        int left = maxDepth(root.left);
        int right = maxDepth(root.right);
        return 1 + Math.max(left, right);
    }
}

144. 二叉树的前序遍历

https://leetcode.cn/problems/binary-tree-preorder-traversal/

class Solution {
    List<Integer> list = new ArrayList<>();
    public List<Integer> preorderTraversal(TreeNode root) {
        dfs(root);
        return list;
    }

    public void dfs(TreeNode root){
        if(root == null) return;
        list.add(root.val);
        dfs(root.left);
        dfs(root.right);
    }
}

543. 二叉树的直径

https://leetcode.cn/problems/diameter-of-binary-tree/

class Solution {
    int res = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        dfs(root);
        return res;
    }

    public int dfs(TreeNode root){
        if(root == null) return 0;
        int left = dfs(root.left);
        int right = dfs(root.right);
        res = Math.max(res, left + right);
        return 1 + Math.max(left, right);
    }
}

http://www.niftyadmin.cn/n/293932.html

相关文章

Java使用HTTP隧道

Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发&#xff0c;并在 1995 年正式推出。 后来 Sun 公司被 Oracle &#xff08;甲骨文&#xff09;公司收购&#xff0c;Java 也随之成为 O…

事务及分布式事务解决方案

基础概念 1.1.事务 事务可以看做是一次大的活动&#xff0c;它由不同的小活动组成&#xff0c;这些活动要么全部成功&#xff0c;要么全部失败。 1.2.本地事务 在计算机系统中&#xff0c;更多的是通过关系型数据库来控制事务&#xff0c;利用数据库本身的事务特性来实现&a…

在 Swift 中使用百度地图 SDK

写在前面 百度地图 SDK提供了一套功能很强大的地图框架使用接口&#xff0c;它不仅提供构建地图的基本接口&#xff0c;还提供POI搜索、地理编码、路线规划、定位、本地覆盖物绘制等服务。而由于百度地图SDK官方网站 上给出的使用说明是使用 Objective-C 语言以及 Xcode 4来进行…

达梦数据库管理系统 DM8

检查数据库版本及服务状态 //查看达梦数据库运行状态 SELECT status$ as 状态 FROM v$instance; //查看达梦数据库版本 SELECT banner as 版本信息 FROM v$version;创建用户 //创建用户 CREATE USER DM IDENTIFIED BY "dameng123";授予用户基本权限 使用 GRANT 语…

《操作系统》——计算机系统概述

前言&#xff1a; 在之前的【Linux】学习中&#xff0c;我们已经对常见指令已经开发工具等进行了详细的了解。紧接着&#xff0c;我们将要学习的便是关于【Linux进程】的基本知识。但是为了帮助大家更好的理解相关的知识概念&#xff0c;我先带领大家来学习关于《操作系统》这…

关于低代码开发平台的一些想法

目录 前言低代码开发平台的理解适用人群大致开发流程版本管理一些我认为的缺陷前端是否会面临失业后记 前言 这段时间在公司培训&#xff0c;了解了公司的低代码开发平台。记录下自己的感想和一些新认知。 低代码开发平台的理解 低代码开发平台&#xff0c;根据名字可知&…

RabbitMQ基础组件封装—整体结构(总篇)

一、父项目 rabbit-parent 使用 idea 创建 maven 项目&#xff0c;命名为 rabbit-parent&#xff0c;作为 最外围的父项目&#xff0c;在其下创建四个 Module &#xff1a;rabbit-api、rabbit-core-producer、rabbit-common、rabbit-task&#xff0c;然后将父项目 rabbit-pare…

ubuntu系统版本查询命令方法

目录 一、使用命令&#xff1a;cat /proc/version 查看 二、 使用命令&#xff1a;uname -a 查看 三、 使用命令&#xff1a;lsb_release -a 查看 四、使用命令&#xff1a;hostnamectl 查看 五、使用命令&#xff1a;cat /etc/issue 查看 一、使用命令&#xff1a;cat /…