二叉树的层序遍历(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; }
外层循环是要获得当前队列中新的尾指针,而内层循环则是对新进队列的元素依次输出,并且按先后将结点对应的子树进入队列中。
learn++