層序遍歷 queue和deque區別 c 實現

2021-10-23 15:55:26 字數 1612 閱讀 9942

一、二叉樹的層序遍歷,主要有兩個關鍵要素,一是佇列,實現工具,二是遞迴,實現演算法。對於乙個二叉樹,層序遍歷的思想就是把根結點傳進佇列,然後進入while迴圈直到隊列為空為止,然後每一次取出佇列的隊首元素,輸出鍵值,然後依次判斷是否存在左右子樹,如果存在把左右子樹進行入列。迴圈結束,則可輸出層序遍歷。

而佇列主要有兩種,一是queue,而是deque。

二、這裡先看兩道例題。

1.給定乙個二叉樹,返回該二叉樹層序遍歷的結果,(從左到右,一層一層地遍歷)

例如:給定的二叉樹是,

該二叉樹層序遍歷的結果是

[[3],

[9,20],

[15,7]

]這裡就是正常的層序遍歷,外加分層的操作而已。具體**如下:

struct treenode 

;vector

int>

>

levelorder

(treenode* root)

vec.

push_back

(v);

v.clear()

;}return vec;

2.給定乙個二叉樹,返回該二叉樹的之字形層序遍歷,(第一層從左向右,下一層從右向左,一直這樣交替)

例如:給定的二叉樹是,

該二叉樹之字形層序遍歷的結果是

[ [3], [20,9], [15,7] ]

這道題與上道題不同的是,每一層不在都是從左往右遍歷,而是形如z字形走位,這樣的話如果僅使用queue佇列就無法滿足要求,所以這次採用的是deque佇列。

具體**如下:

vector

int>

>

zigzaglevelorder

(treenode* root)

else

} num++

; vec.

push_back

(vt)

; vt.

clear()

;}return vec;

這裡增加了乙個標誌位num,用於標記第幾層,下一層應該怎麼遍歷。

三、queue和deque區別

1.queue,單向佇列,先進先出,即尾部插入,頭部取出,

q.push(s)將變數從隊尾入隊,

q.pop()將隊頭元素彈出,

即形如排隊,乙個埠進,乙個埠出

2.deque,雙端佇列,即可以在隊頭隊尾都進行入隊和出隊操作。

dq.push_front(s); 將s從隊頭入隊

dq.push_back(s); 將s從隊尾入隊,和普通佇列方式一樣

dq.front(); 只返回隊頭元素

dq.back(); 只返回隊尾元素

dq.pop_front(); 將隊頭元素彈出

dq.pop_back; 將隊尾元素彈出

java佇列學習 deque和queue

老是記不住peek poll 啊啥的一大堆的操作,記錄一下區別 addfirst addlast offerfirst offerlast removefirst removelast pollfirst polllast getfirst getlast peekfirst peeklast pu...

前序遍歷 中序遍歷 後序遍歷 層序遍歷

根據遍歷畫圖 先根據中序和前序找到每一級的所有根 最近也是在準備筆試,由於沒有系統的學過資料結構,所以每次在考到二叉樹的遍歷的時候都是直接跪,次數多了也就怒了,前些天也是準備 沒時間整這些,現在提交了,算是稍微輕鬆點了,所以花了半天的時間來學了下二叉樹。現在記下來,以便後序查閱。一 二叉樹的遍歷概念...

Java佇列和棧 Queue和Deque

佇列queue 佇列queue也是collection的乙個子介面 佇列介面,底層是乙個特殊的線性表。從一端新增元素 offer 從另一端取出元素 pop 遵循原則 fifo first input,first output 先進先出原則 因為佇列要經常進行增刪操作。因此使用linkedlist鍊錶...