【算法百题之十】二叉树的广度优先遍历
大家好,我是Lampard~~
很高兴又能和大家见面了,接下来准备系列更新的是算法题,一日一练,早日升仙!
今天的问题是:
实现二叉树的广度优先遍历。
我的思路:
首先要弄清楚什么是广度优先遍历。
我们希望输出的结果是:A,B,D,G,F,C,Z,E
我们需要借助队列来实现这个功能:首先把根节点入队列,迭代判断队列是否为空。
在迭代体内再把队列首的左右子树(如果有的话)压入队列,并把队首的元素输出并出列
这样就可以实现广度优先遍历了。
广度遍历的具体代码:
void BinaryTree::GuangDu()
{
queue<BinaryTreeNode*> myQueue;
myQueue.push(root);
while (myQueue.size() != NULL)
{
if(myQueue.front()->getLeftChild ()!=NULL)
myQueue.push(myQueue.front()->getLeftChild());
if (myQueue.front()->getRightChild() != NULL)
myQueue.push(myQueue.front()->getRightChild());
cout << myQueue.front()->getData() << " ";
myQueue.pop();
}
}
如果我们想构造一个上图的树的话,我们前序插入元素的顺序应该是:
A,B,G, # , #,F, Z, #,#,E,#,#,D,#,C,#,#
具体的创造函数请看算法百题之九
测试结果: