二叉树的层序遍历(levelordertraverse)

数据结构关于二叉树的遍历还有一种层序遍历,按层次依次输出元素。最上层最先输出,同层中最左最先输出,使用队列这一结构来实现:

int levelOrderTraverse(IDTree *pTree)
{
	if( pTree == NULL)
	{
		return -1;
	}
	std::vector<IDTree *> vec;
	vec.push_back(pTree);
	size_t cur = 0;
	size_t end = 1;
	while(cur < vec.size())
	{
		end = vec.size();
		while(cur < end)
		{
			cout << vec[cur]->val << endl;
			if(vec[cur]->pLef != NULL)
			{
				vec.push_back(vec[cur]->pLef);
			}
			if(vec[cur]->pRig != NULL)
			{
				vec.push_back(vec[cur]->pRig);
			}
			++cur;
		}
	}
	return 0;
}

 外层循环是要获得当前队列中新的尾指针,而内层循环则是对新进队列的元素依次输出,并且按先后将结点对应的子树进入队列中。

posted @ 2016-03-12 11:10  BestWangJie  阅读(1285)  评论(0编辑  收藏  举报