【模板】二叉树的遍历

目录

 

先序遍历

中序遍历

后序遍历

按层遍历

 


 

先序遍历

先遍历根结点,再遍历左结点,最后遍历右结点。

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;
}

 

事实上,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。

只要理解透彻了这些遍历方式的特点,就能做到举一反三,面对其他题目也能游刃有余。

猜你喜欢

转载自blog.csdn.net/kcn999/article/details/84440460