目录
先序遍历
先遍历根结点,再遍历左结点,最后遍历右结点。
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;
}
中序遍历
先遍历左结点,再遍历根结点,最后遍历右结点。
扫描二维码关注公众号,回复:
4241806 查看本文章
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;
}
事实上,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。
只要理解透彻了这些遍历方式的特点,就能做到举一反三,面对其他题目也能游刃有余。