二叉樹層次遍歷,超好理解(簡單版)

2021-10-10 07:58:49 字數 1016 閱讀 9491

首先**(該**僅有層次遍歷教學作用)

#include#includeusing namespace std;

struct tree;

void point(tree *t)

while(p.empty()==false)

if(t->rhand!=null) }

}int main()

a[0].lhand=&a[1];

a[0].rhand=&a[2];

a[1].lhand=&a[3];

a[1].rhand=&a[4];

a[2].lhand=&a[5];

a[2].rhand=&a[6];

a[3].lhand=&a[7];

a[5].rhand=&a[8];

point(a);

return 0;}

在二叉樹的層次遍歷中,我們需要用到對列,佇列先進先出,進的是對尾,出的是隊首,在這裡我們首先構造乙個二叉樹如下

上圖的樹,在層次輸出函式point中,首先我們建立乙個樹指標型別的佇列,然後首先將樹的根指標放進佇列去,這時佇列只有乙個資料,隊尾隊首均是此資料,第一次while迴圈,此時引數t指標指向的是樹的根,輸出t->data,然後將隊首元素刪除,佇列變空,判斷t指向的二叉樹是否有左孩子,有的話將指向左孩子的指標填入到佇列中去,然後右孩子…當進行第二次while迴圈時,引數t指向下乙個隊首,輸出t->data,即根的左孩子,然後將隊首元素刪除,此時下乙個隊首是根的右孩子,佇列不再變空,將左孩子的左孩子和左孩子的右孩子添到佇列裡,第三次while迴圈,引數t指向下乙個隊首,輸出t->data,即根的右孩子,t指向根的右孩子,將右孩子的左孩子和右孩子的右孩子添到佇列中去,然後依次類推就達到了如圖的效果

由此達到了每層每層輸出的效果

二叉樹層次遍歷(遞迴版)

題目 分析 看到這個題目我第一反應是遞迴,不過貌似好像大概還有挺多不同的解法。本篇文章記錄一下我的遞迴思路,其他的演算法留待日後學習。力扣上給出的空方法模板的返回值為list 結合題幹可知,每一層的節點數值應按順序存入乙個集合中,所有的節點集合也要儲存在乙個集合中。那麼問題來了,對於方法而言,二叉樹...

層次遍歷二叉樹

問題 假定根節點位於第0層 1.層次遍歷二叉樹 每層換行分開 2.層次遍歷二叉樹指定的某層 本文 例如 上圖中1.123 4567 82.第三層 78可以看出得出第二問的解,第一問迎刃而解了,所以從問題二下手 1.層次遍歷二叉樹指定的某層 可以得出這樣的乙個結論 遍歷二叉樹的第k層,相當於遍歷二叉樹...

二叉樹層次遍歷

題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。思路 二叉樹的層次遍歷,利用棧的先進後出的特性。struct treenode class solution res.push back temp while m.empty m中是從左往右入棧,這裡把它反過來,s中是從右往左...