二叉樹層序 層序換行 層序Z型列印

2021-07-10 12:22:12 字數 1292 閱讀 7311

//節點資料結構

class tnode

; t data;

tnode* lchild, *rchild, *parent;

};

一:層序列印

利用佇列的先進先出特效,教科書般的答案。

templatevoid tritree::levalorder()

tnode* pnode = root;

queue*> qnode;

qnode.push(pnode);

while (!qnode.empty())

qnode.pop();

if (nullptr != pnode->lchild)

if (nullptr != pnode->rchild)

}puts("");

}

二:層序換行列印。

只需要增加乙個變數標記一行的結束就行,我們在每層遍歷完後加入nullptr.當nullptr出隊時,說明一行結束,輸出換行。但是關鍵就在於加入nullptr時上層的所有節點必須已經入隊。

templatevoid tritree::levalchangelineorder(tnode* bt)

if (nullptr != ptemp->rchild)

}else if (!qnode.empty())

}}

我看了別人上網部落格多數是使用雙端佇列,但個人感覺不容易懂,而且雙端佇列在stl中是個效率很低的容器。具體請看stl原始碼。

1:使用vector和層序遍歷一樣,只不過將偶數行reserve一下,簡單粗暴,但是很麻煩。

2:使用雙棧,原理很簡單,畫圖便可明白。

void tritree::levalorderzig(tnode* proot)

stack*> snodeleft;

stack*> snoderight;

tnode* ptemp = nullptr;

snodeleft.push(proot);

while (!snodeleft.empty() || !snoderight.empty())

if (nullptr != ptemp->rchild)

}puts("");

while (!snoderight.empty())

if (nullptr != ptemp->rchild)

}puts("");

}}

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

給定乙個二叉樹,返回該二叉樹層序遍歷的結果,從左到右,一層一層地遍歷 例如 給定的二叉樹是,該二叉樹層序遍歷的結果是 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...