1. 程式人生 > >二、(4)二叉樹的層次遍歷

二、(4)二叉樹的層次遍歷

二叉樹本來是分層結構,但若施加某種約束(如遍歷),則可以轉變成線性結構。

二叉樹的遍歷方法主要有:前序遍歷(DLR),中序遍歷(LDR),後序遍歷(LRD),層次遍歷。本文主要介紹二叉樹層次遍歷方法。

層次遍歷:從根節點開始,向下逐層從左往右遍歷。

例如:

上圖所示的二叉樹的層次遍歷順序為:0 1 2 3 4 5 6 7

本文使用的二叉樹資料結構參見之前部落格:https://blog.csdn.net/qq_18108083/article/details/84727888

層次遍歷的實現藉助於佇列結構的先進先出特性,自根節點往下逐層從左往右入隊,每個迴圈出隊一個節點進行遍歷。

template<typename T> void binTree<T>::travLevel(binNode<T>* bn_i, void(*func)(T& bn))
{
	queue<binNode<T>*> q;
	q.enqueue(bn_i);
	while (!q.empty())  //佇列非空
	{
		bn_i = q.dequeue();
		func(bn_i->data);
		if(bn_i->lc)
			q.enqueue(bn_i->lc);
		if(bn_i->rc)
			q.enqueue(bn_i->rc);
	}
}

執行結果: