二叉樹的層次遍歷

2021-07-13 03:44:28 字數 2617 閱讀 5784

終於自己能夠寫出二叉樹的前序, 中序, 後序和層次遍歷了,還是有點開心的。才發現原來建樹是那麼簡單,只要理解好遞迴就差不多了。

之前轉過前中後序的遍歷,現在就記下層次遍歷吧。

用pat上的題當例子吧。

時間限制

400 ms

記憶體限制

65536 kb

**長度限制

8000 b

判題程式

standard

作者 陳越

給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。

輸入格式:

輸入第一行給出乙個正整數n(<=30),是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三行給出其中序遍歷序列。數字間以空格分隔。

輸出格式:

在一行中輸出該樹的層序遍歷的序列。數字間以1個空格分隔,行首尾不得有多餘空格。

輸入樣例:

7

2 3 1 5 7 6 4

1 2 3 4 5 6 7

輸出樣例:
4 1 6 3 5 7 2
一開始用的是乙個一維陣列來建樹,即tree[1]為根節點,tree[i]的左兒子是tree[2*i],右兒子是tree[2*i+1].

#include#include#include#includeusing namespace std;

const int maxn = 105;

//the size of maxn should be 2^(n+1)-1

int tree[maxn], in[maxn], post[maxn];

void build(int rt, int n, int *in, int *post)

void bfs(void)

}int main(void)

這個方法只用了乙個陣列來描述樹, 但需要開很大很大的陣列, 很浪費空間, 需要開到2^(n+1)-1, 結點數一多就不能用這種方法。

像這樣:

方法二:用兩個陣列記錄某結點的左右孩子

#include#include#include#includeusing namespace std;

const int maxn = 35;

int post[maxn], in[maxn], lch[maxn], rch[maxn];

int build(int n, int *in, int *post)

void bfs(int root)

}int main(void)

這個方法陣列大小只需要n即可。

pat上還有一題,映象層序遍歷,其實只要在建樹時講左右孩子互換即可。

時間限制

400 ms

記憶體限制

65536 kb

**長度限制

8000 b

判題程式

standard

作者 陳越

給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。

輸入格式:

輸入第一行給出乙個正整數n(<=30),是二叉樹中結點的個數。第二行給出其中序遍歷序列。第三行給出其前序遍歷序列。數字間以空格分隔。

輸出格式:

在一行中輸出該樹反轉後的層序遍歷的序列。數字間以1個空格分隔,行首尾不得有多餘空格。

輸入樣例:

7

1 2 3 4 5 6 7

4 1 3 2 6 5 7

輸出樣例:
4 6 1 7 5 3 2
同樣貼上兩個**

一:

#include#include#include#includeusing namespace std;

//maxn should be very big!!

const int maxn = 10005;

int tree[maxn], in[maxn], pre[maxn];

void build(int rt, int n, int *in, int *pre)

void bfs(void)

}int main(void)

二:

#include#include#include#includeusing namespace std;

const int maxn = 35;

int pre[maxn], in[maxn], lch[maxn], rch[maxn];

int build(int n, int *pre, int *in)

void bfs(int root)

}int main(void)

還可以用結構體存樹,但相對來說會麻煩一點。

層次遍歷二叉樹

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

二叉樹層次遍歷

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

二叉樹層次遍歷

層次遍歷二叉樹,每一次儲存在list中,結果按從葉子層到根,從左到右的順序儲存 一 class solution return lists 相當於在先序的基礎上改進,level是每個node所在的層次。如果lists大小和level相等,說明開始新一層的儲存。如果不等,則直接把值存入相應層次的lis...