【模板】二叉樹的遍歷
阿新 • • 發佈:2018-11-26
目錄
先序遍歷
先遍歷根結點,再遍歷左結點,最後遍歷右結點。
int n;
int lt[MAX_N], rt[MAX_N];
// 如果沒有則為-1
void Traversal(int x)
{
cout << x;
if(lt[x] ^ -1) Traversal(lt[x]);
if(rt[x] ^ -1) Traversal(rt[x]);
return;
}
中序遍歷
先遍歷左結點,再遍歷根結點,最後遍歷右結點。
int n;
int lt[MAX_N], rt[MAX_N];
// 如果沒有則為-1
void Traversal(int x)
{
if(lt[x] ^ -1) Traversal(lt[x]);
cout << x;
if(rt[x] ^ -1) Traversal(rt[x]);
return;
}
後序遍歷
先遍歷左結點,再遍歷右結點,最後遍歷根結點。
int n; int lt[MAX_N], rt[MAX_N]; // 如果沒有則為-1 void Traversal(int x) { if(lt[x] ^ -1) Traversal(lt[x]); if(rt[x] ^ -1) Traversal(rt[x]); cout << x; return; }
按層遍歷
按照層級從左到右遍歷兄弟結點,其根節點為最先被遍歷的結點。
int n; int lt[MAX_N], rt[MAX_N]; // 沒有則為-1 queue<int> q; void Traversal() { q.push(0); // 假設1為根節點 int tmp; while(!q.empty()) { tmp = q.front(); q.pop(); cout << tmp; if(lt[tmp] ^ -1) q.push(lt[tmp]); if(rt[tmp] ^ -1) q.push(rt[tmp]); } return; }
事實上,給定中序和其它一種遍歷的序列就可以確定一棵二叉樹的結構。
只要理解透徹了這些遍歷方式的特點,就能做到舉一反三,面對其他題目也能遊刃有餘。