c 二叉樹的層序遍歷 二叉樹的層序遍歷及應用

2021-10-17 08:07:41 字數 1479 閱讀 2146

二叉樹的遍歷實質問題就是,將二維結構線性化。

深度優先遍歷對應的是前序、中序、後續遍歷;廣度優先對應的是層序遍歷。

看完後閉著眼寫出二叉樹的四種遍歷結果 這篇文章從形象化方面描述了深度優先遍歷;

當我們說遞迴時,到底是在說什麼 這篇文章則詳細分析了前序遍歷對棧的使用過程。

今天深入學習一下層序遍歷,層序遍歷也是面試**現頻率較多的乙個知識點。

如下二叉樹,它的層序遍歷結果為:1 - 2 - 5 - 3 - 4 - 6

我們用佇列對它進行層序遍歷:

把根節點放入佇列中

從佇列中取出乙個元素

訪問該元素所有節點

若該元素左右節點非空,則將其左右節點順序入佇列

c++:

void leverorder(ptreenode &tree)

queue q;

if(tree != null)

q.push(tree);//root 進佇列

while(q.empty() == false)

q.pop();//已經遍歷郭的佇列元素出佇列

cout<< q.front()->data

if(q.front()->leftptr != null)

{//如果有左孩子,左孩子入佇列

q.push(q.front()->leftptr);

if(q.front()->rightptr != null)

{//如果有右孩子,右孩子入佇列

q.push(q.front()->rightptr);

python:

from collections import deque

#匯入雙向佇列

class btree(object):

#定義二叉樹

def __init__(self):

self._root = none

self._size = 0

def leverorder(self):

#建立乙個佇列

q = deque()

#root加入佇列

btree =

#佇列不空

while q:

#佇列頭出佇列

node = q.popleft()

#輸出列表,追加

#如果有左孩子,左孩子入佇列

if node.lft:

#如果有右孩子,右孩子入佇列

if node.rgt:

return btree

可以用來求二叉樹的高度和寬度

判斷二叉樹是否為完全二叉樹

層序遍歷應用場景豐富,很受面試官青睞。

二叉樹層序遍歷 求二叉樹的層序遍歷

給定乙個二叉樹,返回該二叉樹層序遍歷的結果,從左到右,一層一層地遍歷 例如 給定的二叉樹是,該二叉樹層序遍歷的結果是 3 9,20 15,7 示例1 輸入 返回值 1 2 示例2輸入 返回值 1 2,3 4,5 解題思路 重點是如何把在一層的節點放到一起,設定乙個引數專門放一層的節點 class t...

層序遍歷二叉樹

要求 設計乙個演算法層序遍歷二叉樹 同一層從左到右訪問 我寫了乙個演算法 用乙個佇列儲存被訪問的當前節點的左右孩子以實現層序遍歷。status hierarchybitree bitree t,status visit telemtype e destroyqueue q 釋放佇列空間 return...

二叉樹層序遍歷

主要流程 確定root非空 根指標進佇列 佇列非空就一直迴圈 依次掃瞄目前佇列中所有元素 新增的不算 從佇列取出第一元素 將值放入結果vector中 判斷左右子節點非空,並依次入隊 將本次結果放入二維陣列中 如果需要按層逆序輸出的話,在這裡將二維結果倒排一下 返回二維結果 vector levelo...