首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 输出8 6 10 5 7 9 11。
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 输出8 6 10 5 7 9 11。
admin
2019-03-29
89
问题
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
输出8 6 10 5 7 9 11。
选项
答案
#include
#include
using namespace std; struct BTreeNode // a node in the binary tree { int m_nValue; // value of node BTreeNode *m_pLeft; // left child of node BTreeNode *m_pRight; // right child of node }; /////////////////////////////////////////////////////////////////////// // Print a binary tree from top level to bottom level // Input: pTreeRoot - the root of binary tree /////////////////////////////////////////////////////////////////////// void PrintFromTopToBottom(BTreeNode *pTreeRoot) { if(!pTreeRoot) return; // get a empty queue deque
dequeTreeNode; // insert the root at the tail of queue dequeTreeNode.push_back(pTreeRoot); while(dequeTreeNode.size()) { // get a node from the head of queue BTreeNode *pNode = dequeTreeNode.front(); dequeTreeNode.pop_front(); // print the node cout << pNode->m_nValue << ’ ’; // print its left child sub-tree if it has if(pNode->m_pLeft) dequeTreeNode.push_back(pNode->m_pLeft); // print its right child sub-tree if it has if(pNode->m_pRight) dequeTreeNode.push_back(pNode->m_pRight); } }
解析
这曾是微软的一道面试题。这道题实质上是要求遍历一棵二元树,只不过不是我们熟悉的前序、中序或者后序遍历。
我们从树的根结点开始分析。自然先应该打印根结点8,同时为了下次能够打印8的两个子结点,我们应该在遍历到8时把子结点6和10保存到一个数据容器中。现在数据容器中就有两个元素6 和10了。按照从左往右的要求,我们先取出6访问。打印6的同时要把6的两个子结点5和7放入数据容器中,此时数据容器中有三个元素10、5和7。接下来我们应该从数据容器中取出结点10访问了。注意10比5和7先放入容器,此时又比5和7先取出,就是我们通常说的先入先出。因此不难看出这个数据容器的类型应该是个队列。
既然已经确定数据容器是一个队列,现在的问题变成怎么实现队列了。实际上我们无需自己动手实现一个,因为STL已经为我们实现了一个很好的deque(两端都可以进出的队列),我们只需要拿过来用就可以了。
我们知道树是图的一种特殊退化形式。同时如果对图的深度优先遍历和广度优先遍历有比较深刻的理解,将不难看出这种遍历方式实际上是一种广度优先遍历。因此这道题的本质是在二元树上实现广度优先遍历。
转载请注明原文地址:https://www.kaotiyun.com/show/YRmZ777K
0
程序员面试
相关试题推荐
求最大连续递增数字串(如“ads3sl456789DF3456ld345AA”中的“456789”)
输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。因
公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行(排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的
如何部署一个ASP.net页面。
存储过程和函数的区别
使用.NETPassport向导注册MSN帐户,姓名为李明,邮件的地址为liming@hotmail.com,密码为123456lm。
将上题的规则应用到已下载的邮件。
随着网络信息技术的进步和社会信息化程度的不断提高,一个由庞大的网络产业带动,并导致整个经济社会产生巨大变革的数字经济时代已经离我们越来越近。目前,“数字化校园”、“数字企业”、“数字城市”等一系列项目快速上马,在这些项目中,信息的数字化与数字信息的网络传输
在实际应用中,用户通常依靠评价程序来测试系统的性能。以下评价程序中,(16)的评测准确程度最低。事务处理性能委员会(TransactionProcessingPerformanceCouncil,TPC)是制定商务应用基准程序(Benchmark)标
随机试题
Somebody______hereonlythismorning.
女性,42岁,主因“活动后气短半年,加重1个月”入院。查体:双肺部可闻及细小湿性啰音,胸部X线可见肺内多发浸润影,胸膜下小叶间隔增厚。若活检病理示UIP,以下哪些特征符合此类型
A.清瘟败毒饮加减B.黄连温胆汤加减C.生脉散合参附汤加减D.参芪地黄汤加减E.六味地黄丸加减急性肾衰竭气脱津伤证的治疗方剂为
依据《药品说明书和标签管理规定》,药品标签上有效期具体表述形式应为()
背景某宾馆大堂改造装修工程,考虑到施工范围和施工内容较为明确,工期较短,业主与承包商根据《建设工程施工合同(示范文本)》GF—2013一0201签订了固定总价合同。消防系统工程改造内容工程量目前无法确定,合同中约定此部分暂估价为120万元,同时合
收益率曲线反映了债券市场的()。
(2013年)2006年2月,甲、乙、丙、丁四人共同出资设立文路留学服务有限责任公司(以下简称“文路公司”)。四名股东的出资比例依次是35%、30%、25%和10%。甲担任公司执行董事、总经理;公司不设监事会,丙任监事。(1)2007年2月,丙提出,甲在
求
如果关系模式中每一个非平凡且非函数依赖的多值依赖的左部都包含码,则该关系模式的规范化程度达到了【】。
Thepopularityofthefilmshowsthatthereceivers’fearswerecompletely____.
最新回复
(
0
)