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.pswp.cn/news/378014.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378014.shtml
英文地址,請注明出處:http://en.pswp.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的都保…