树的最大深度和最小深度(java)

article/2025/10/3 11:52:40

目录

  • 树的深度和高度
  • 二叉树的最大高度
    • 思路分析
    • 递归
    • 迭代
  • N叉树的最大深度
    • LeetCode.559.N叉树的最大深度
      • 思路分析
      • 递归
      • 迭代
  • LeetCode.二叉树的最小深度
      • 思路分析
      • 递归
      • 迭代

树的深度和高度

什么是树的深度?什么是树的高度,一张图让你弄明白!我们暂时以二叉树为例。

在这里插入图片描述

二叉树的最大高度

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7],
在这里插入图片描述
返回它的最大深度 3 。

思路分析

我们在做每一道关于二叉树的题时,都要考虑该用什么遍历方式来解题。

我们要计算一棵树的深度,那么我们就要到达这棵树的最低端,然后在往上数,二叉树的只有左节点和右节点,所以我们只要达到这两者的最低端,然后进行比较即可,所以我们在这里使用后序遍历(左右根)。

递归

如果到现在还不会写递归,请入土吧

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

其实在这里我们可以对代码进行精简,但是我们一定要会上面的代码才行,不要看人家写的简单就抄上去,看两眼看懂了原理,其实根本不懂。

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

迭代

迭代法,我们最适合使用层序遍历了,因为正好最大深度就是层数,若不懂层序遍历,请转博客二叉树的层序遍历。

class Solution {public int maxDepth(TreeNode root) {//root为空,则返回0if(root == null) return 0;//初始化depthint depth = 0;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.offer(root);//当队列为空时,跳出while循环while(!queue.isEmpty()){//队列里面存在的节点数int size = queue.size();//每次循环完一层,深度+1depth++;for (int i = 0 ; i < size ; i++) {TreeNode cur = queue.peek();queue.poll();if (cur.left != null) queue.offer(cur.left);if (cur.right != null) queue.offer(cur.right);}}return depth;}
}

层序遍历是一种思想,其实任何一种算法都是一种思想,你可能看了二叉树的层序遍历也并不会写这道题,很正常,代码熟练活,写几道题就可以大体掌握思想了,光靠想不可能会的,即使你会逻辑,你也不会实现。

N叉树的最大深度

什么是N叉树,就是不是二叉树的都是N叉树

例如:

LeetCode.559.N叉树的最大深度

给定一个 N 叉树,找到其最大深度。

最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。

N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。

示例 1:

在这里插入图片描述

输入:root = [1,null,3,2,4,null,5,6]
输出:3
示例 2:

在这里插入图片描述

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:5

提示:

树的深度不会超过 1000 。
树的节点数目位于 [0, 104] 之间。

思路分析

其实N叉树的最大深度计算和二叉树没什么区别,就是多了几个子孩子,将几个子孩子都计算一次就可以了,还要注意的一点是,二叉树和N叉树代码写法是不一样的

class Node {public int val;public List<Node> children;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, List<Node> _children) {val = _val;children = _children;}
}

在这里要注意我们是将孩子节点存放在List里面的,那么我们就可以使用List中的方法了,给予我们很多方便。

我们同样可以用递归和迭代来写代码

递归

class Solution {public int maxDepth(Node root) {if (root == null) return 0;int depth = 0;//把每个孩子节点都遍历一遍for (int i = 0 ; i < root.children.size() ; i++) {//这里的size(),get(),使用到了List里面的方法depth = Math.max(depth , maxDepth(root.children.get(i)));}//注意:一定要+1return 1 + depth;}
}

其实这个代码,比二叉树的容易理解多了,不存在怎么前中后

迭代

迭代我们同样使用层次遍历,数层数

class Solution {public int maxDepth(Node root) {if (root == null) return 0;Queue<Node> queue = new LinkedList<Node>();queue.offer(root);int depth = 0;while (!queue.isEmpty()) {int size = queue.size();depth++; for (int i = 0 ; i < size ; i++) {Node cur = queue.peek();queue.poll();//将当前树的所有子节点遍历出来,加入队列for (int j = 0 ; j < cur.children.size() ; j++) {if (cur.children.get(j) != null) queue.offer(cur.children.get(j));}}}return depth;}
}

LeetCode.二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

示例 1:

在这里插入图片描述

输入:root = [3,9,20,null,null,15,7]
输出:2

思路分析

在做最小深度的时候我们需要避免一个误区,我们首先来看下面图例:

在这里插入图片描述

这是为什么呢?这就要我们稍微了解一下树的深度的概念了。

  • 从根结点到叶子结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
  • 这个叶子节点要注意,是叶节子点,左右孩子都为null的才是叶子结点,所以上图的深度不是1而是3

这也就导致了求最大深度和最小深度的不同,我们需要判断是不是叶子结点。

递归

class Solution {public int minDepth(TreeNode root) {if (root == null) return 0;int leftDepth = minDepth(root.left);int rightDepth = minDepth(root.right);//左子树为空,右子树不为空,说明最小深度为1 + 右子树深度,因为当前节点不是叶子节点//只有当左右子树都为空的节点才是叶子节点if (root.left == null && root.right != null) {return 1 + rightDepth; }//左子树不为空,右子树为空if (root.left != null && root.right == null) {return 1 + leftDepth;}return 1 + Math.min(leftDepth,rightDepth);}
}

一定要记住是,寻找叶子结点,这样你才能理解这个代码!!!

迭代

class Solution {public int minDepth(TreeNode root) {if (root == null) return 0;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.offer(root);int depth = 0;//在这里设立一个flag,当找到叶子结点的时候,那说明找到了最小深度boolean flag = true; while(!queue.isEmpty()) {int size = queue.size();depth++;for (int i = 0 ; i < size ; i++) {TreeNode cur = queue.peek();queue.poll();if (cur.left != null) queue.offer(cur.left);if (cur.right != null) queue.offer(cur.right);//如果左右孩子都为null,说明是叶子结点if (cur.left == null && cur.right == null) {flag = false;break;}}//已经找到最小深度,退出//顺便说一句,因为这是层序遍历,所以可以确定是最小深度if (flag == false) break;}return depth;}
}

我们可能有同学想用栈来实现层序遍历,这也不是不可以,但是有点复杂,有兴趣的同学可以尝试一下,面试一般不会这样难为你的,明明有简单的方法为什么要让你用复杂的办法,就算是考你对栈的理解也不会这样考,面试官可能会让用队列实现栈,或者用栈来实现队列。

若有误,请指教!!!


http://chatgpt.dhexx.cn/article/nPQlrUdl.shtml

相关文章

【数据结构】树

树 前言树的定义和基本术语二叉树二叉树的性质二叉树的存储遍历二叉树线索二叉树 树和森林树的存储结构 赫夫曼树及其应用总结 前言 最害怕的数据结构之一——树&#xff0c;另一个是图。主要是当时递归和链表没学好&#xff0c;遍历或插入的时候总是思路不清&#xff0c;一堆的…

树的高度和深度

1、树的深度 树的深度可以这样理解&#xff0c;计算一个节点的深度&#xff0c;从根节点算起&#xff08;记住从1开始计数&#xff0c;而不是0&#xff0c;程序员的通病在这不好使&#xff09;&#xff0c;到该节点所经过的节点数&#xff08;包括此节点&#xff09;为树的深度…

无线协议

一个AP的网络覆盖半径只有15米&#xff0c;需要布置多个AP&#xff0c;并且保证处在同一个网络中&#xff0c;受同一台或几台AC同一管理WDS&#xff0c;无线分布系统&#xff0c;俗称“无线桥接”指多个无线网络相互联结的方式构成一个整体的无线网络AP和AP之间通过无线信号互联…

Wi-Fi 安全协议 - RSN

RSN&#xff08;Robust Security Network&#xff0c;强健安全网络&#xff09; TKIP 和 CCMP只能解决数据完整和机密性问题&#xff1b;为解决认证问题&#xff0c;IEEE 802.11借鉴了802.1X&#xff0c;引入RSNA&#xff08;Robust Secure Network Association&#xff09;&a…

Wi-Fi 安全协议 - WPA

WPA (Wi-Fi Protected Access) 网络安全存取技术 WPA具有两种标准&#xff1a;WPA和WPA2&#xff0c;WPA2是WPA的增强型版本&#xff0c;增加了支持AES的加密方式。 WPA&#xff1a;由于WEP存在安全缺陷&#xff0c;在IEEE 802.11i提出前&#xff0c;Wi-Fi联盟&#xff08;WFA…

wifi协议-802

WIFI协议 http://standards.ieee.org/about/get/802/802.11.html https://en.wikipedia.org/wiki/IEEE_802 Name Description NoteIEEE 802.1Higher Layer LAN ProtocolsactiveIEEE 802.2LLCdisbandedIEEE 802.3EthernetactiveIEEE 802.4Token busdisbandedIEEE 802.5Defines t…

WIFI无线协议802.11a/b/g/n/ac的演变以及区别

毫无疑问&#xff0c;WiFi的出现普及带给我们巨大的上网便利&#xff0c;所以了解一下WiFi对应的802.11协议的演变和现在不同版本之前的区别也是非常有必要的。 1&#xff0c;常识普及 Wi-Fi是一种允许电子设备连接到一个无线局域网&#xff08;WLAN&#xff09;的技术&#…

WiFi各协议理论速度

一、总览 二、11b到11g提升点 802.11g工作在2.4G频段下&#xff0c;能够支持OFDM和CCK两种调制方式&#xff0c;提供16-QAM、64-QAM、BPSK和QPSK四种编码方式&#xff0c;我们通常说的54Mbps速率就是在2.4G频段下&#xff0c;通过OFDM调制&#xff0c;采用64-QAM编码的情况下实…

Wi-Fi 安全协议

无线网络的安全要求 机密性&#xff1a;确保数据不会泄露&#xff0c;防止数据被未经授权的第三者拦截。 帧主体加密机制&#xff08;frame body encryption&#xff09;&#xff1a;主要用来提供机密性。完整性&#xff1a;确保数据在传输过程中不被修改了。 完整性检验机制&…

图解 802.11wifi协议

微信公号&#xff1a;卢同学 关注可了解更多。若有问题或建议&#xff0c;请与本人联系; 目录 凡事若能综观形势&#xff0c;通常有助于细节的进一步探究 从OSI七层模型来看&#xff0c;802规范的重心放在OSI模型最下面的两层&#xff0c;即数据链路层和物理层。 数据链路层又…

无线协议架构

目录 1 无线协议架构 1.1 用户面 1.2 控制面 2 多无线双链接 3 无线接入网络共享 1 无线协议架构 1.1 用户面 用户面的协议架构如下图所示&#xff0c;SDAP, PDCP, RLC和MAC各层&#xff08;在gNB的网络端终止&#xff09;所具…

无线局域网安全协议(WEP、WPA、WAPI)

文章目录 一、WEP&#xff08;有线等效保密&#xff09;二、WPA&#xff08;Wi-Fi网络安全接入&#xff09;三、WAPI&#xff08;无线局域网鉴别和保密基础结构&#xff09; WLAN&#xff08;Wireless Local Area Network&#xff09;指应用无线通信技术将计算机设备互联起来&a…

WiFi协议框架

PHY&#xff08;Port Physical Layer&#xff09;&#xff0c;中文可称之为端口物理层&#xff0c;是一个对OSI模型物理层的共同简称。 PHY连接一个数据链路层的设备&#xff08;MAC&#xff09;到一个物理媒介&#xff0c;如光纤或铜缆线。典型的PHY包括PCS&#xff08;Physic…

Wi-Fi 协议结构

OSI和TCP/IP结构 网络层次说明应用层应用程序间的通信表示层为不同客户端提供数据和信息的语法转换会话层为通信双方制定通信方式&#xff0c;创建和注销会话传输层用于控制数据流量&#xff0c;调试和错误处理网络层为数据传送的目的地寻址&#xff0c;单位packet数据链路层建…

WLAN标准协议

大家在设置路由器的时候可能看到路由器通过802b/g/n协议来传输数据&#xff0c;但是这个协议是标准协议吗&#xff1f;为什么要通过这个协议来传输网络数据发包传输包。 除了802.11标准协议外&#xff0c;在WLAN领域还有一个更常见更常用的名词——Wi-Fi。WiFi是无线保真&#…

WIFI协议详解

本博客整理自网络&#xff0c;仅供学习参考&#xff0c;如有侵权&#xff0c;联系删除。邮箱&#xff1a;rom100163.com。 802.11帧的三种类型&#xff1a; 管理帧&#xff1a;负责监督&#xff0c;主要用来加入或退出无线网络&#xff0c;以及处理基站之间连接的转移事宜。 …

802.11协议:wifi

802.11协议 博客链接&#xff1a;https://www.blog.23day.site/articles/71 一、协议简介 IEEE 802协议簇是指IEEE标准中关于局域网&#xff08;LAN&#xff09;和城域网&#xff08;MAN&#xff09;的一系列标准。IEEE 802中定义的服务和协议限定在OSI七层网络模型的最低两层…

WiFi/802.11协议简介

什么是WLAN 让我们先了解局域网。LAN表示局域网。它是使用某种媒介连接多台计算机。对于LAN的情况&#xff0c;这种介质将是有线的&#xff0c;包括以太网电缆&#xff0c;光纤等。如左图所示&#xff0c;LAN可以使用以太网交换机或集线器或路由器形成。所有计算机都与此交换机…

Wi-Fi技术

1、Wi-Fi简介 Wi-Fi技术&#xff1a; Wi-Fi是一个创建于IEEE 802.11标准的无线局域网技术。IEEE 802.11是无线局域网通用的标准&#xff0c;它是由电气和电子工程师协会&#xff08;IEEE&#xff09;所定义的无线网络通信的标准。虽然经常将Wi-Fi与802.11混为一谈&#xff0…

计算机网络第八版——第一章课后题答案(超详细)

第一章 该答案为博主在网络上整理&#xff0c;排版不易&#xff0c;希望大家多多点赞支持。后续将会持续更新&#xff08;可以给博主点个关注~ 第二章 答案 【1-01】计算机网络可以向用户提供哪些服务&#xff1f; 解答&#xff1a;这道题没有现成的标准答案&#xff0c;因…