這道題沒有什麼思考的漸進形式,但是我想分享的幾個知識點,這幾個知識點也是解決這個問題的關鍵,分別是:遞迴思想、指標的操作方法與二叉樹的遍歷方式。
我們首先貼上今天這道題的**:
class
treenode
:def
__init__
(self, x)
->
none
: self.val = x
self.left =
none
self.right =
none
class
solution
:def
maxdepth
(self, root)
: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
基本思路就是:
1、按著分叉的左邊走,直到走不下去為止,返回乙個「0」;
2、在父節點的函式主體中會選擇右分叉開始新的遞迴,即重複步驟1;
3、當父節點分別遍歷過了左分叉與右分叉,得到的返回值去較大的那個,加一就是當前節點能走到的最大深度,返回深度值即可,之後就回到了父節點的父節點,開始在父節點的父節點開始重複步驟2;
首先我們說說「遞迴思想」。打個不確切的比方,遞迴思想就是個套娃,可以在函式本體中呼叫自己。博主第一次接觸到遞迴思想是在二叉樹與鍊錶,雖然操作起來非常麻煩,但是遞迴的好處就是我們不用再集中注意力於運算元據的尺寸問題,我們可以設定乙個停止節點,從而實現定長或條件遍歷。同時對於運算元據進行迴圈處理時也可以使用遞迴的方法來實現。遞迴的思想是leetcode題庫中二叉樹型別題目中必須要掌握的方法,否則就好像自己無法對乙個列表進行迴圈語句遍歷一樣舉步維艱。
指標整個概念在python中是不存在的,但是在很多教程中都在說遍歷二叉樹時如何如何挪動指標。在這道題目中我們要學會如何使用python建立、使用二叉樹。建立與使用的方法均在**裡了,這個東西不好講,大家自己細細品吧…
乍一聽二叉樹的遍歷方式就是遞迴嘛,還有什麼好說的呢?這句話確實沒錯,但是遞迴也有非常多種方式,包括左遍歷、右遍歷、層遍歷等等(名字記不太清了,但是不同的遍歷方式有不同的優缺點,讀者按需選擇)。不同的遍歷方式對於程式的執行速度有很大的影響。
今天的題目鍛鍊程式設計思維的作用似乎沒有提供對於二叉樹基本處理工具的作用大,是比較需要去記憶和理解的一道題目。
今天也是依舊高產的小龐~
晚安,愛你們~
leetcode 二叉樹 對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3 方法一 遞迴 思路 如果乙個樹的左子樹與右子樹映象對稱,則該樹是對稱的 兩個樹互為映象的...
LeetCode (二叉樹)反轉二叉樹
遞迴交換每乙個節點的左右子樹,重點在於訪問每乙個節點,然後交換左右子樹 definition for a binary tree node.struct treenode struct treenode inverttree struct treenode root 由於至少要講每乙個節點都訪問一次...
leetcode 二叉樹 二叉樹的層次遍歷
給定乙個二叉樹,返回其按層次遍歷的節點值。即逐層地,從左到右訪問所有節點 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回其層次遍歷結果 3 9,20 15,7 方法一 遞迴 思路 比較訪問節點所在層次level和當前最高層次len levels 判定是否需...