- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二叉树层序遍历
二叉树层序遍历
微软面试题,难度系数低,题目描述如下:
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入
8
/ \
6 10
/ \ / \
5 7 9 11
输出8 6 10 5 7 9 11.
逻辑分析:
1、显然就是二叉树的层序遍历,在学习数据结构课程的时候,多数人都对先序,中序,后序遍历感到熟悉,这三种都属于深度搜索,而层序遍历则是广度搜索。尽管如此,微软以此为面试题目,还是相当便宜面试者。
2、对于层序遍历,类似先序遍历的想法,我们知道,先序遍历的循环实现需要借助辅助栈来实现,栈是一种LIFO的数据结构,即后进先出,last in first out,那么,对于层序遍历来说,过程刚好相反,即FIFO,first in first out,我们每次将根节点入队列,当队列非空,则将front赋给临时指针temp,继而输出根节点的卫星域,接下来判断根节点左右孩子是否为空,非空则入队列,上述工作以后,再度从队列中取元素,队列空,则循环结束。
void printByLevel(BSTreeNode* root)
{
queueBSTREENODE* Q;
BSTreeNode* p = root;
if(p == NULL)
return ;
Q.push(p);
while(!Q.empty())
{
p = Q.front();
Q.pop();
cout 《 p-m_nValue 《 endl;
if(p-m_pLeft)
Q.push(p-m_pLeft);
if(p-m_pRight)
Q.push(p-m_pRight);
}
}
3、因为之前做的是BSTree的镜像翻转例子,这里为了方便,不再改写为BTree,毕竟二叉排序树也是二叉树的一种。完整代码如下:
#include IOSTREAM
#include QUEUE
using namespace std;
typedef struct BSTreeNode????????? //a node in the BST
{
int m_nValue;??????????????????????????? //Value of node
struct BSTreeNode *m_pLeft;??? //left child of node
struct BSTreeNode *m_pRight;?? //right child of node
}BSTreeNode;
void printByLevel(BSTreeNode* root)
{
queueBSTREENODE* Q;
BSTreeNode* p = root;
if(p == NULL)
return ;
Q.push(p);
while(!Q.empty())
{
p = Q.front();
Q.pop();
cout 《 p-m_nValue 《 endl;
if(p-m_pLeft)
Q.push(p-m_pLeft);
if(p-m_pRight)
Q.push(p-m_pRight);
}
}
int main()
{
BSTreeNode node[7];
node[0].m_nValue = 8;
node[0].m_pLeft = node[1];
node[0].m_pRight = node[2];
node[1].m_nValue = 6;
node[1].m_pLeft = node[3];
node[1].m_pRight = node[4];
node[2].m_nValue = 10;
node[2].m_pLeft = node[5];
node[2].m_pRight = node[6];
node[3].m_nValue = 5;
node[3].m_pLeft = NULL;
node[3].m_pRight = NULL;
node[4].m_nValue = 7;
node[4].m_pLeft = NULL;
node[4].m_pRight = NULL;
node[5].m_nValue = 9;
node[5].m_pLeft = NULL;
node[5].m_pRight = NULL;
node[6].m_nValue = 11;
node[6].m_pLeft = NULL;
nod
文档评论(0)