二叉樹的遍歷實質問題就是,將二維結構線性化。
深度優先遍歷對應的是前序、中序、後續遍歷;廣度優先對應的是層序遍歷。
看完後閉著眼寫出二叉樹的四種遍歷結果 這篇文章從形象化方面描述了深度優先遍歷;今天深入學習一下層序遍歷,層序遍歷也是面試**現頻率較多的乙個知識點。當我們說遞迴時,到底是在說什麼 這篇文章則詳細分析了前序遍歷對棧的使用過程。
如下二叉樹,它的層序遍歷結果為: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...