- UID
- 580
- 精华
- 积分
- 561
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
问题:
如何实现二叉树的层次遍历?
解析:
我们可以使用队列来解决这个问题
<1>将根节点压入队列
<2>判断队列是否为空
<3>不为空则获取队列最前端的元素,打印出该元素
<4>将该元素移除队列
<5>如果该元素有左孩子,则将其左孩子进入队列
<6>如果该元素有右孩子,则将其右孩子进入队列
主要函数如下所示:- template<typename Type> void BSTrees<Type>::traverseLevel(Node* root)
- {
- if( root == NULL)
- {
- cout<<"This is a empty tree"<<endl;
- return;
- }
- queue<Node*> que;
- que.push(root);
- while( !que.empty() )
- {
- Node* ptr = que.front();
- que.pop();
- cout<<ptr->e<<endl;
- if(ptr->leftChild != NULL)
- que.push(ptr->leftChild);
- if(ptr->rightChild != NULL)
- que.push(ptr->rightChild);
- }
- }
复制代码 整个程序如下所示:
BSTrees.h
main.cpp
- //main.cpp
- #include <iostream>
- #include "BST.h"
- using namespace std;
- void main()
- {
- BSTrees<int>Bst;
- int Arr[9] = {6,2,8,4,10,0,12,16,14};
- for (int i=0;i<9;i++)
- Bst.insert(Arr[i]);
- Bst.traverse(Bst.getRoot());
- cout<<"Tree'slength is:"<<Bst.getLength()<<endl;
- Bst.traverseLevel(Bst.getRoot());
- }
复制代码 |
|