從上往下列印出二叉樹的每個節點,同層節點從左至右列印。
演算法流程:
特例處理: 當樹的根節點為空,則直接返回空列表 ;
初始化: 列印結果列表 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...