python-leetcode 36.二叉樹的最大深度

題目:

給定一個二叉樹root,返回其最大深度

二叉樹的最大深度是指從根節點到最遠葉子節點的最長路徑上的節點數


方法一:深度優先搜索

知道了左子樹和右子樹的最大深度l和r,那么該二叉樹的最大深度即為:max(l,r)+1

而左子樹和右子樹的最大深度又可以以同樣的方式進行計算。因此可以用「深度優先搜索」的方法來計算二叉樹的最大深度。具體而言,在計算當前二叉樹的最大深度時,可以先遞歸計算出其左子樹和右子樹的最大深度,然后在O(1)時間內計算出當前二叉樹的最大深度。遞歸在訪問到空節點時退出。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def maxDepth(self, root):""":type root: Optional[TreeNode]:rtype: int"""if root is None:return 0else:left_height=self.maxDepth(root.left)right_height=self.maxDepth(root.right)return max(left_height,right_height)+1

時間復雜度:O(n)n為二叉樹節點的個數。每個節點在遞歸中只被遍歷一次。

空間復雜度:O(height)其中height表示二叉樹的高度


方法二:廣度優先搜索

廣度優先搜索的隊列里存放的是「當前層的所有節點」。每次拓展下一層的時候,用一個變量ans來維護拓展的次數,該二叉樹的最大深度即為ans。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def maxDepth(self, root):""":type root: Optional[TreeNode]:rtype: int"""if not root:return 0queue=[root] #使用一個隊列(queue)來進行廣度優先搜索, 初始時包含根節點 ans=0while queue: #在隊列不為空時持續進行。每次循環表示遍歷樹的一層size=len(queue)  #獲取當前隊列中節點的數量,即當前層的節點數while size>0:node=queue.pop(0)if node.left:queue.append(node.left) #當前節點 node 有左子節點,就將左子節點加入隊列if node.right:queue.append(node.right)#當前節點 node 有右子節點,就將右子節點加入隊列size-=1  #處理完當前節點,減少層內節點計數ans+=1 #層處理完,增加深度計數器return ans

時間復雜度:O(n)每個節點只會被訪問一次

空間復雜度:O(n)取決于隊列存儲的元素數量

源自力扣官方題解

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70219.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70219.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70219.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RESTful 的特點與普通 Web API 的區別

RESTful 是一種設計風格,而不僅僅是普通的 Web API。它遵循一些特定的原則和約束,使得 API 更加簡潔、可擴展和易于理解。以下是 RESTful 的特點,以及與普通 Web API 的區別: RESTful 的特點 1. 資源導向 RESTful API 的核心是資…

結構風荷載理論與Matlab計算

結構風荷載理論與matlab計算的實例程序,適合初學者理解matlab風荷載計算 資源文件列表 程序_結構風荷載理論與Matlab計算/chapter1/exam_simWind_1_1.m , 1035 程序_結構風荷載理論與Matlab計算/chapter1/Extrmv.m , 303 程序_結構風荷載理論與Matlab計算/chapter1…

numpy(02 數據類型和數據類型轉換)

numpy(01 入門) 目錄 一、Python NumPy 數據類型 1.1 NumPy 基本類型 1.2 數據類型對象 (dtype) 1.3 具體實例 二、Numpy數據類型轉換 2.1 浮點數據轉換 2.2 整型數據轉換 2.3 浮點數轉整數 一、Python NumPy 數據類型 1.1 NumPy 基本類型 下表列舉了常用 NumPy 基…

【雅思博客04】Silence please!

A: Those people in front of us are making so much noise. It’s so inconsiderate! B: Don’t worry about it; it’s not such a big deal. A: Oh... I can’t hear a thing! Excuse me, can you keep it down? C: Sure, sorry about that! A: Someone’s phone is ri…

【大語言模型_3】ollama本地加載deepseek模型后回答混亂問題解決

背景: 本地下載了DeepSeek-R1-Distill-Qwen-7B模型后,通過ollama create DeepSeek-R1-Distill-Qwen-7B -f ds7b.mf加載模型啟動后回答混亂,無法使用。 解決方法 重新下載模型,選擇了DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf 重…

nginx ngx_http_module(9) 指令詳解

nginx ngx_http_module(9) 指令詳解 nginx 模塊目錄 nginx 全指令目錄 一、目錄 1.1 模塊簡介 ngx_http_uwsgi_module:uWSGI支持模塊,允許Nginx與uWSGI服務器進行通信。uWSGI是一種應用服務器協議,廣泛用于Python Web應用的部署。通過該…

用PyInstaller構建動態腳本執行器:嵌入式Python解釋器與模塊打包 - 簡明教程

技術場景: 需分發的Python工具要求終端用戶可動態修改執行邏輯將Python環境與指定庫(如NumPy/Pandas)嵌入可執行文件實現"一次打包,動態擴展"的輕量化解決方案。 ▌ 架構設計原理 1. 雙模運行時識別 # 核心判斷邏輯…

山石網科×阿里云通義靈碼,開啟研發“AI智造”新時代

近日,山石網科正式宣布全面接入阿里云通義靈碼企業專屬版,這標志著山石網科在研發智能化、自動化領域邁出重要一步,為研發工作注入強大的AI動力,實現多維度的效率飛躍。 此次合作,阿里云通義靈碼依托強大的AI能力&…

《被討厭的勇氣》(六)

1.自由就是被別人討厭。 2.毫不在意別人的評價、不害怕被別人討厭、不追求被他人認可,如果不付出以上這些代價,那就無法貫徹自己的生活方式,也就是不能獲得自由。 3.在意你的臉的只有你自己。 4.不去干涉別人的課題也不讓別人干涉自己的課題.…

使用 PyTorch 實現標準卷積神經網絡(CNN)

卷積神經網絡(CNN)是深度學習中的重要組成部分,廣泛應用于圖像處理、語音識別、視頻分析等任務。在這篇博客中,我們將使用 PyTorch 實現一個標準的卷積神經網絡(CNN),并介紹各個部分的作用。 什…

SpringBoot2.0整合Redis(Lettuce版本)

前言: 目前java操作redis的客戶端有jedis跟Lettuce。在springboot1.x系列中,其中使用的是jedis, 但是到了springboot2.x其中使用的是Lettuce。 因為我們的版本是springboot2.x系列,所以今天使用的是Lettuce。關于jedis跟lettuce的區別&#…

qt + opengl 給立方體增加陰影

在前幾篇文章里面學會了通過opengl實現一個立方體,那么這篇我們來學習光照。 風氏光照模型的主要結構由3個分量組成:環境(Ambient)、漫反射(Diffuse)和鏡面(Specular)光照。下面這張圖展示了這些光照分量看起來的樣子: 1 環境光照(Ambient …

大模型工具大比拼:SGLang、Ollama、VLLM、LLaMA.cpp 如何選擇?

簡介:在人工智能飛速發展的今天,大模型已經成為推動技術革新的核心力量。無論是智能客服、內容創作,還是科研輔助、代碼生成,大模型的身影無處不在。然而,面對市場上琳瑯滿目的工具,如何挑選最適合自己的那…

stream流常用方法

1.reduce 在Java中,可以使用Stream API的reduce方法來計算一個整數列表的乘積。reduce方法是一種累積操作,它可以將流中的元素組合起來,返回單個結果。對于計算乘積,你需要提供一個初始值(通常是1,因為乘法…

pgAdmin4在mac m1上面簡單使用(Docker)

問題 想要在本地簡單了解一下pgAdmin4一些簡單功能。故需要在本機先安裝看一看。 安裝步驟 拉取docker鏡像 docker pull dpage/pgadmin4直接簡單運行pgAdmin4 docker run --name pgAdmin4 -p 5050:80 \-e "PGADMIN_DEFAULT_EMAILuserdomain.com" \-e "PGAD…

ubuntu下安裝TFTP服務器

在 Ubuntu 系統下安裝和配置 TFTP(Trivial File Transfer Protocol)服務器可以按照以下步驟進行: 1. 安裝 TFTP 服務器軟件包 TFTP 服務器通常使用 tftpd-hpa 軟件包,你可以使用以下命令進行安裝: sudo apt update …

Softing線上研討會 | 自研還是購買——用于自動化產品的工業以太網

| 線上研討會時間:2025年1月27日 16:00~16:30 / 23:00~23:30 基于以太網的通信在工業自動化網絡中的重要性日益增加。設備制造商正面臨著一大挑戰——如何快速、有效且經濟地將工業以太網協議集成到其產品中。其中的關鍵問題包括:是否只需集成單一的工…

vscode創建java web項目

一.項目部署 1.shiftctrlp,選擇java項目 2.選擇maven create from arcetype 3.選擇webapp 4.目錄結構如下,其中index.jsp是首頁 5.找到左下角的servers,添加tomcat服務器 選擇 再選擇: 找到你下載的tomcat 的bin目錄的上一級目錄&#x…

C語言指針學習筆記

1. 指針的定義 指針(Pointer)是存儲變量地址的變量。在C語言中,指針是一種非常重要的數據類型,通過指針可以直接訪問和操作內存。 2. 指針的聲明與初始化 2.1 指針聲明 指針變量的聲明格式為:數據類型 *指針變量名…

DeepSeek R1生成圖片總結2(雖然本身是不能直接生成圖片,但是可以想辦法利用別的工具一起實現)

DeepSeek官網 目前階段,DeepSeek R1是不能直接生成圖片的,但可以通過優化文本后轉換為SVG或HTML代碼,再保存為圖片。另外,Janus-Pro是DeepSeek的多模態模型,支持文生圖,但需要本地部署或者使用第三方工具。…