1. 程式人生 > >【模板】二叉樹的遍歷

【模板】二叉樹的遍歷

目錄

 

先序遍歷

中序遍歷

後序遍歷

按層遍歷

 


 

先序遍歷

 

先遍歷根結點,再遍歷左結點,最後遍歷右結點。

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

 


 

事實上,給定中序和其它一種遍歷的序列就可以確定一棵二叉樹的結構。

只要理解透徹了這些遍歷方式的特點,就能做到舉一反三,面對其他題目也能遊刃有餘。