運用遞迴解決二叉樹問題

2021-10-07 14:45:49 字數 1937 閱讀 6904

二叉樹的各種遍歷方法可以參考我的部落格  二叉樹的各種遍歷方法。

給定乙個二叉樹,找出其最大深度。

二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。

說明:葉子節點是指沒有子節點的節點。

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution:

def maxdepth(self, root: treenode) -> int:

res = 0

def dfs(root,d):

if not root:return

nonlocal res

res = max(res,d)

dfs(root.left,d+1)

dfs(root.right,d+1)

dfs(root,1)

return res

給定乙個二叉樹,檢查它是否是映象對稱的。

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution:

def issymmetric(self, root: treenode) -> bool:

def sym(node1,node2):

if not node1 and not node2:

return true

if not node1 or not node2:

return false

return node1.val==node2.val and sym(node1.left,node2.right) and sym(node1.right,node2.left)

if not root:

return true

return sym(root.left,root.right)

給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。

說明:葉子節點是指沒有子節點的節點。

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution:

def haspathsum(self, root: treenode, sumn: int) -> bool:

def dfs(root,tar):

if not root:return false

tar = tar - root.val

if tar==0 and not root.left and not root.right:

return true

return dfs(root.left,tar) or dfs(root.right,tar)

return dfs(root,sumn)

運用遞迴解決二叉樹相關問題

在之前的章節中,我們已經介紹了如何解決樹的遍歷問題。我們也已經嘗試過使用遞迴解決樹的為前序遍歷 中序遍歷和後序遍歷問題。事實上,遞迴是解決樹相關問題的最有效和最常用的方法之一。本節中,我們將會介紹兩種典型的遞迴方法。本小節內容節選自 leetcode 運用遞迴解決樹的問題 遞迴是解決樹的相關問題最有...

二叉樹遞迴

我們來看一下二分搜尋樹的釋放,這就是乙個典型的遞迴問題 function destroy node 這個遞迴包括兩個部分,乙個是遞迴終止條件,乙個是遞迴的執行。我們知道遞迴是不斷地將當前函式壓入函式棧,如果沒有if node null return這個終止條件,當函式棧被壓滿之後就會發生棧溢位 棧的...

遞迴二叉樹

1 基本概念 1 節點 結點包含資料和指向其它節點的指標。2 根節點 樹第乙個結點稱為根節點。3 結點的度 結點擁有的子節點個數。4 葉節點 沒有子節點的節點 度為0 5 父子節點 乙個節點father指向另乙個節點child,則child為孩子節點,father為父親節點。6 兄弟節點 具有相同父...