演算法 二叉樹解題

2021-08-04 05:01:14 字數 1297 閱讀 4486

給定乙個二叉樹,從左向右地,自底向上的遍歷每一層的元素。

例:給定二叉樹:

3/ \

9 20

/ \

15 7

返回的結果:

[[15,7],

[9,20],

[3]]

首先,要有乙個概念,無論是樹的題目還是圖的題目,解決的方式一般就是dfs或者是bfs,往裡面套就可以了。題目中提到要自底而上,但是這個其實問題不大,只要將自頂而上的列表反轉一下就行了。

#python中用deque來實現佇列的功能

from collections import deque

defbfs

(root):

queue = deque()

wraplist =

if root is

none:

return wraplist

while len(queue) != 0:

#發現這個規律是最重要的

levelnum = len(queue)

sublist =

for i in range(levelnum):

node = queue.popleft()

if node.left is

notnone:

if node.right is

notnone:

wraplist.insert(0,sublist)#實現自底而上

return wraplist

"""相比於bfs實現,dfs實現有點晦澀

dfs一路向下,自達樹的最低層,過程中新增了與樹深度相同的子列表

看看遞迴路徑:

3 -> 9

<-

-> 20 -> 15

<-

-> 7

看這路徑,就可以發現,豎著看這些數字正好就是我們要的結果。

"""def

dfs(root):

wraplist =

deflevel

(root,l):

if root is

none:

return

if l >= len(wraplist):

wraplist.insert(0,)

level(root.left,l+1)

level(root.right,l+1)

level(root,0)

return wraplist

二叉樹解題思想

引言二叉樹本身就是使用遞迴而生成的,所以在解決相關問題的時候,首先是使用遞迴來做,但是因為演算法的時間和空間的問題,所以盡量將遞迴轉換為迭代來做。遞迴解題思路遞迴,就是在執行的過程中呼叫自己。構成遞迴需具備的條件 1.子問題須與原始問題為同樣的事,且更為簡單 2.不能無限制地呼叫本身,須有個出口,化...

二叉樹演算法

include include include define elementtype int node structure constructor typedef struct bt binarytreenode,btroot function declear inorder btroot root...

二叉樹演算法

二叉樹的遍歷演算法 1.先序遍歷 對每乙個節點將其看作根節點按照根左右的順序進行遍歷。示例 void preordertree node root 先序遍歷二叉樹 return 2.中序遍歷 對每乙個節點將其看作根節點按照左根右的順序進行便利。示例 void inordertree node roo...