LeetCode 二叉树、N叉树的最大深度与最小深度(递归解)

目录

    • 104. 二叉树的最大深度
    • 559. N叉树的最大深度
    • 111. 二叉树的最小深度

之前的笔记中,已经用层序遍历解决过这个问题了
现在试着用深度的解法去求解

104. 二叉树的最大深度

给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回它的最大深度 3 。
**选择深度遍历方式:**由于我们需要返回深度信息,所以选择后序遍历,通过递归函数的返回值做计算树的高度。
1、确定递归函数的参数以及返回值类型
输入树的根结点,返回这棵树的深度

int getDepth(TreeNode* node)

2、确定终止条件:
如果为空结点,返回高度0

if(node == NULL) return 0;

3、确定单层逻辑:
先求左子树深度,再求右子树的深度,最后取左右深度最大的数值+1(算上当前的中间结点),就是当前结点为根节点的树的最大深度。

int left=getDepth(node->left);
int right=getDepth(node->right);
return max(left,right)+1

完整代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:int getDepth(TreeNode* node){if(node == NULL) return 0;int left=getDepth(node->left);int right=getDepth(node->right);return max(left,right)+1;}int maxDepth(TreeNode* root) {int result=getDepth(root);return result;}
};

上面的方法使用的是后序遍历求根结点的高度来求二叉树的最大深度。
当然也可以使用前序遍历,更能体现出回溯的思想:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:int result;void getDepth(TreeNode* node,int depth){//中result = depth > result ? depth:result;     //取结果与depth中的较大值。if(node->left ==NULL && node->right ==NULL) return ;//左if(node->left){depth++;        //深度+1getDepth(node->left,depth);depth--;        //回溯,深度-1}//右if(node->right){depth++;        //深度+1getDepth(node->right,depth);depth--;        //回溯,深度-1}return ;}int maxDepth(TreeNode* root) {result = 0;if(root == NULL) return result;getDepth(root,1);return result;}
};

559. N叉树的最大深度

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

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

例如,给定一个 3叉树 :
在这里插入图片描述

/*
// Definition for a Node.
class Node {
public:int val;vector<Node*> children;Node() {}Node(int _val) {val = _val;}Node(int _val, vector<Node*> _children) {val = _val;children = _children;}
};
*/class Solution {
public:int getDepth(Node* node){if(node == NULL) return 0;int maxnum=0;for(int i=0;i<node->children.size();i++){maxnum=max(maxnum,getDepth(node->children[i]));}return maxnum+1;}int maxDepth(Node* root) {int result=getDepth(root);return result;}
};

111. 二叉树的最小深度

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

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

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

示例:

给定二叉树 [3,9,20,null,null,15,7],

3

/
9 20
/
15 7
返回它的最小深度 2.
**选择深度遍历方式:**由于我们需要返回深度信息,所以选择后序遍历,通过递归函数的返回值做计算树的高度。
1、确定递归函数的参数以及返回值类型
输入树的根结点,返回这棵树的深度

int getDepth(TreeNode* node)

2、确定终止条件:
如果该结点的左右孩子都为空,返回 0

if(node==NULL) return 0;

3、确定单层逻辑:
如果左子树存在,右子树不存在,结果为左子树最小深度+1
如果右子树存在,左子树不存在,结果为右子树最小深度+1
如果两个子树都存在,选择最小的结果+1
如果两个孩子都不存在的话,进入下一个递归地时候会返回0,两个结果都是1,所以这里不需要考虑那样的情况

int leftDepth=getDepth(node->left);
int rightDepth=getDepth(node->right);
if(node->left && !node->right) return leftDepth+1;
if(!node->left && node->right) return rightDepth+1;
int result=1+min(rightDepth,leftDepth);
return result;

完整代码

class Solution {
public:int minDepth(TreeNode* root) {if(root==NULL) return 0;int leftDepth=minDepth(root->left);int rightDepth=minDepth(root->right);if(root->left && !root->right) return leftDepth+1;if(!root->left && root->right) return rightDepth+1;return 1+min(rightDepth,leftDepth);}
};

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

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

相关文章

十、模板匹配

一、概念 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。 需要首先给定一个模板图像A&#xff0c;和一个待检测图像B。 在待检测图像B上&#xff0c;从左往右&#xff0c;从上往下计算待检测图像B和模板图像A所重叠的匹配度&#xff0c;匹配度越高则两者相同的可…

基于WF的意见征集4(浅析)

接口项目&#xff1a;IClass&#xff08;项目名称&#xff09; HTHuiFuusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Workflow.Runtime;using System.Workflow.Activities;namespace IClass{ /// <summary> /…

那些VisualStudio隐藏的调试功能

VisualStudio是一个强大的调试工具&#xff0c;里面很多隐藏功能少有人问津&#xff0c;但是在特定场景可以节省你很多时间&#xff0c;本文主要介绍一些VisualStudio调试相关的隐藏功能&#xff0c;欢迎大家补充。 运行到指针(Run to cursor) 大多数人用Visual Studio在调试程…

php连接数据库代码_PHP代码连接各种数据库

php连接数据库代码1)用PHP连接MySQL (1) Connecting with MySQL in PHP) <?php$host "localhost";$uname "username";$pw "password";$db "newDB";try {$conn new PDO("mysql:host$host;dbname$db", $uname, $pw);…

【C++ grammar】对象和类(创建对象、对象拷贝、分离声明与实现)

目录1、用类创建对象1、面向对象的特征2、对象由什么构成3、如何定义对象4、创建对象并访问对象成员1. Constructors(构造函数)2. Constructing Objects (创建对象)3. Object Member Access Operator(对象访问运算符)2、对象拷贝以及分离声明与实现1、类是一种数据类型1.1. 定义…

十一、图像二值化

一、二值图像 其实就是把图像转换为只有黑白的两种颜色图像&#xff0c;即像素值非零即一 三角阈值二值化 对一个图像进行操作&#xff0c;获取图像的直方图&#xff0c;找到波峰和波谷进行连线设为线段A&#xff0c;每个点做有关线段A的垂线垂足在线段A上&#xff0c;最后将…

百度地图LV1.5实践项目开发工具类bmap.util.jsV1.2

/*** 百度地图使用工具类-v1.5* * author boonya* date 2013-7-7* address Chengdu,Sichuan,China* email boonyasina.com* company KWT.Shenzhen.Inc.com* notice 有些功能需要加入外部JS库才能使用&#xff0c;另外还需要申请地图JS key .* 申请地址&#xff1a;http…

isatty_带有示例的Python File isatty()方法

isatty文件isatty()方法 (File isatty() Method) isatty() method is an inbuilt method in Python, it is used to check whether a file stream is an interactive or not in Python i.e. a file stream is connected to a terminal device. If a file is connected to a ter…

地毯店 如何辨别地毯的好坏?

在实地选购地毯品牌时&#xff0c;许多地方需要引起注意&#xff0c;而且要显得专业&#xff0c;这样才能科学深入地辨别地毯的好坏。比如&#xff0c;辨明拉绞地毯和抽绞地毯两种工艺的打结方法几乎相同&#xff0c;只是变绞形式上有所区别。抽绞的方式较古老&#xff0c;一般…

十二、图像金字塔

一、原理 reduce高斯模糊降采样 expand扩大卷积 PyrDown&#xff1a;降采样 PyrUp&#xff1a;还原 二、高斯金字塔 import cv2 import numpy as np from matplotlib import pyplot as pltdef pyramid(image):level 3temp image.copy()pyramid_image []for i in range(le…

java uuid静态方法_Java UUID toString()方法与示例

java uuid静态方法UUID类toString()方法 (UUID Class toString() method) toString() method is available in java.util package. toString()方法在java.util包中可用。 toString() method is used for string denotation of this UUID. toString()方法用于此UUID的字符串表示…

LeetCode 110. 平衡二叉树思考分析

题目 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / 9 20 / 15 7 返回 true 。 示例 2…

Redhat配置XDMCP及相关linux命令

为了能够使用 Xwin32 或 Xmanager 登录到 Linux 主机所进行的配置。需要首先在linux上进行相关配置 1.“系统”菜单中选择“管理”下的“登录屏幕” 2.出现“登录窗口首选项”窗口。选择“远程”选项卡&#xff0c;将“样式”改为:“与本地相同” 3.选择“安全”选项卡&#xf…

充实的日子里忙忙碌碌

实习已经有一个多月了&#xff0c;话说这个月发工资就有我的份儿了&#xff0c;哇咔咔~~~感觉忙忙碌碌的生活其实很充实的。工作日每天都是7点10分左右起来&#xff0c;8点半到公司买早饭吃东西&#xff0c;9点上班开工。先罗列要干的东西&#xff0c;然后一项一项完成&#xf…

十三、图像梯度

一、两种算子 一阶导数—Sobel算子 水平梯度&#xff1a; 垂直梯度&#xff1a; 最终图像梯度&#xff1a; 二阶导数—Laplacian算子 在二阶导数的时候&#xff0c;最大变化处的值为零&#xff0c;即边缘是零值。 常见的拉普拉斯算子&#xff1a;、其所有元素之和为零。…

Java Formatter out()方法与示例

格式化程序类out()方法 (Formatter Class out() method) out() method is available in java.util package. out()方法在java.util包中可用。 out() method is used to get Appendable for the output. out()方法用于获取输出的Appendable。 out() method is a non-static meth…

SQL2008,SQL2005存储过程解密

SQL2008,SQL2005存储过程解密 下载&#xff1a;附件 SQL2008,SQL2005存储过程解密第一步操作步骤&#xff1a;程序->Sql Server2005-> 配置工具-> Sql Server 外围应用配置器-> 功能的外围应用配置器-> DataBase Engine-> DAC -> 启用远程DAC 第二步&a…

LeetCode 257. 二叉树的所有路径 思考分析

目录题目思路一&#xff1a;深度递归思路二&#xff1a;广度迭代关于回溯题目 给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 输入: 输出: [“1->2->5”, “1->3”] 解释: 所有根节点到叶子节点的路…

自定义django的Template context processors

简要步骤&#xff1a; 1.编辑一个函数: def media_url(request):from django.conf import settingsreturn {media_url: settings.MEDIA_URL}2.配置settings&#xff1a; TEMPLATE_CONTEXT_PROCESSORS (myapp.context_processors.media_url,) 3.确保几点&#xff1a; 1&#xf…

十四、Canny边缘提取

一、算法步骤 1&#xff0c;对图像进行GaussianBlur(高斯模糊)消除一些噪声 2&#xff0c;对图像进行灰度转换cvtColor 3&#xff0c;计算梯度Sobel/Scharr 4&#xff0c;非最大信号抑制 5&#xff0c;高低阈值输出二值图像 设定两个阈值T1和T2&#xff0c;凡是高于T2的都保…