從上往下列印二叉樹

2021-09-26 04:32:42 字數 3060 閱讀 5408

從上往下列印出二叉樹的每個節點,同層節點從左至右列印。

演算法流程:

特例處理: 當樹的根節點為空,則直接返回空列表 ;

初始化: 列印結果列表 res = ,包含根節點的佇列 queue = [root] ;

bfs 迴圈: 當佇列 queue 為空時跳出;

出隊: 隊首元素出隊,記為 node;

列印: 將 node.val 新增至列表 tmp 尾部;

新增子節點: 若 node 的左(右)子節點不為空,則將左(右)子節點加入佇列 queue ;

返回值: 返回列印結果列表 res 即可。

# -*- coding:utf-8 -*-

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution:

# 返回從上到下每個節點值列表,例:[1,2,3]佇列,早進早出

def printfromtoptobottom(self, root):

# write code here

l=if not root:

return

q=[root]

while len(q):

t=q.pop(0)

if t.left:

if t.right:

return l

時間複雜度 o(n) : nn 為二叉樹的節點數量,即 bfs 需迴圈 n 次。

空間複雜度 o(n) : 最差情況下,即當樹為平衡二叉樹時,最多有 n/2個樹節點同時在 queue 中,使用 o(n) 大小的額外空間。

從上到下按層列印二叉樹,同一層的節點按從左到右的順序列印,每一層列印到一行。

例如:給定二叉樹: [3,9,20,null,null,15,7],

3/ \

9  20

/  \

15   7

返回其層次遍歷結果:

[[3],

[9,20],

[15,7]

]演算法流程:

特例處理: 當根節點為空,則返回空列表 ;

初始化: 列印結果列表 res = ,包含根節點的佇列 queue = [root] ;

bfs 迴圈: 當佇列 queue 為空時跳出;

新建乙個臨時列表 tmp ,用於儲存當前層列印結果;

當前層列印迴圈: 迴圈次數為當前層節點數(即佇列 queue 長度);

出隊: 隊首元素出隊,記為 node;

列印: 將 node.val 新增至 tmp 尾部;

新增子節點: 若 node 的左(右)子節點不為空,則將左(右)子節點加入佇列 queue ;

將當前層結果 tmp 新增入 res 。

返回值: 返回列印結果列表 res 即可

class solution:

def levelorder(self, root: treenode) -> list[list[int]]:

if not root:

return

res=

q=[root]

while len(q):

l=for _ in range(len(q)):

t=q.pop(0)

if t.left:

if t.right:

return res

時間複雜度 o(n) : n為二叉樹的節點數量,即 bfs 需迴圈 n 次。

空間複雜度 o(n) : 最差情況下,即當樹為平衡二叉樹時,最多有 n/2 個樹節點同時在 queue 中,使用 o(n) 大小的額外空間。

③32 - iii. 從上到下列印二叉樹 iii

方法一:層序遍歷 + 雙端佇列

利用雙端佇列的兩端皆可新增元素的特性,設列印列表(雙端佇列) tmp ,並規定:

奇數層 則新增至 tmp 尾部 ,

偶數層 則新增至 tmp 頭部 。

演算法流程:

特例處理: 當樹的根節點為空,則直接返回空列表 ;

初始化: 列印結果空列表 res ,包含根節點的雙端佇列 deque ;

bfs 迴圈: 當 deque 為空時跳出;

新建列表 tmp ,用於臨時儲存當前層列印結果;

當前層列印迴圈: 迴圈次數為當前層節點數(即 deque 長度);

出隊: 隊首元素出隊,記為 node;

列印: 若為奇數層,將 node.val 新增至 tmp 尾部;否則,新增至 tmp 頭部;

新增子節點: 若 node 的左(右)子節點不為空,則加入 deque ;

將當前層結果 tmp 轉化為 list 並新增入 res ;

返回值: 返回列印結果列表 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 levelorder(self, root: treenode) -> list[list[int]]:

if not root:

return

res=

q=[root]

num=0

while len(q):

l=for _ in range(len(q)):

t=q.pop(0)

if len(res)%2!=0:

l.insert(0,t.val)

else:

if t.left:

if t.right:

num+=1

return res

從上往下列印二叉樹

從上往下列印二叉樹需要乙個雙端佇列,stl提供了deque容器符合我們的要求,和測試 如下 include include include using namespace std struct binarytreenode binarytreenode createbinarytreenode in...

從上往下列印二叉樹

題目描述 從上往下列印出二叉樹的每個節點,同層節點從左至右列印。思路 用佇列儲存將要列印的節點,出佇列時,將左節點和右節點分別加入佇列當中,直到隊列為空,列印完畢。public arraylist integer printfromtoptobottom treenode root queue qu...

從上往下列印二叉樹

題目 從上往下列印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。程式 include include include struct binarytreenode 函式名稱 createbinarytree 函式功能 通過二叉樹的先序序列建立二叉樹 輸入引數 proot 二叉樹的根節點 st...