首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 则打印出两条路径:10, 12和10, 5, 7。 二元树结点的数据结构定义为: struct
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 则打印出两条路径:10, 12和10, 5, 7。 二元树结点的数据结构定义为: struct
admin
2019-03-29
112
问题
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数22和如下二元树
则打印出两条路径:10, 12和10, 5, 7。
二元树结点的数据结构定义为:
struct BinaryTreeNode // a node in the binary tree
{
int m_nValue; // value of node
BinaryTreeNode *m_pLeft; // left child of node
BinaryTreeNode *m_pRight; // right child of node
};
选项
答案
/////////////////////////////////////////////////////////////////////// // Find paths whose sum equal to expected sum /////////////////////////////////////////////////////////////////////// void FindPath ( BinaryTreeNode* pTreeNode, // a node of binary tree int expectedSum, // the expected sum std::vector
&path, // a pathfrom root to current node int& currentSum // the sum of path ) { if(!pTreeNode) return; currentSum += pTreeNode->m_nValue; path.push_back(pTreeNode->m_nValue); // if the node is a leaf, and the sum is same as pre-defined, // the path is what we want. print the path bool isLeaf = (!pTreeNode->m_pLeft && !pTreeNode->m_pRight); if(currentSum == expectedSum && isLeaf) { std::vector
::iterator iter =path.begin(); for(; iter != path.end(); ++ iter) std::cout<<*iter<<’\t’; std::cout<
m_pLeft) FindPath(pTreeNode->m_pLeft, expectedSum, path, currentSum); if(pTreeNode->m_pRight) FindPath(pTreeNode->m_pRight, expectedSum, path, currentSum); // when we finish visiting a node and return to its parent node, // we should delete this node from the path and // minus the node’s value from the current sum currentSum -= pTreeNode->m_nValue; //!!I think here is no use path.pop_back(); }
解析
这是百度的一道笔试题,考查对树这种基本数据结构以及递归函数的理解。
当访问到某一结点时,把该结点添加到路径上,并累加当前结点的值。如果当前结点为叶结点并且当前路径的和刚好等于输入的整数,则当前的路径符合要求,我们把它打印出来。如果当前结点不是叶结点,则继续访问它的子结点。当前结点访问结束后,递归函数将自动回到父结点。因此我们在函数退出之前要在路径上删除当前结点并减去当前结点的值,以确保返回父结点时路径刚好是根结点到父结点的路径。我们不难看出保存路径的数据结构实际上是一个栈结构,因为路径要与递归调用状态一致,而递归调用本质就是一个压栈和出栈的过程。
转载请注明原文地址:https://kaotiyun.com/show/nxmZ777K
0
程序员面试
相关试题推荐
Signslike"Pleaseratemefivestars"pointtoagrowingproblemwithbusinessesintheon-demandeconomyofapp-basedservices
[A]Updateyourbudget[B]Submitachangeofaddressform[C]Bookacleaningservicebeforehand[D]Scheduleawalk-t
输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:{intm_nKey;ListNode*m_pNext;};
两个单向链表,找出它们的第一个公共结点。链表的结点定义为:structListNode{intm_nKey;ListNode*m_pNext;};
在金山网镖中添加一个端口过滤规则,其中端口为3080,协议为TCP,类型为远程,操作为禁止。
在金山毒霸2008中,阻止下载运行.ActiveX控件。
在即时通讯工具MSN的界面上,使用邮件按钮,将“我的显示图片”和对方的显示图片设置为一样,均为足球;然后向对方发送消息:“both0fushave!thesamepicture.”。
若按下Shift键同时用鼠标分别单击幻灯片中的标题、文本和图片对象,则()。A.仅最后单击的对象被选中B.三个对象被同时选中C.仅标题对象被选中D.仅图形对象被选中
以下关于输入法状态切换的组合键正确的是______A.使用Ctrl+、来切换中文标点和英文标点B.使用Ctrl+空格键来打开或关闭中文输入法C.使用Shift+空格键来切换半角输入模式和全角输入模式D.使用Shift+Ctrl来切换半角输入模式和
请利用“外观和主题”窗口,设置屏幕保护为“字幕”,文字为“全国专业技术人员计算机应用能力考试中,请移动鼠标开始”字体为“黑体”,字号为“72”,颜色为“浅绿色”(请按题目的顺序操作)。
随机试题
下述墙体构造,哪一条是错误的?[2018—052,2000—072]
()是指为社会提供服务的建设项目,包括国防科学研究等建设项目。
《水土保持法》与《水法》和《土地管理法》的区别主要在于该法侧重于()。
《银行业从业人员职业操守》中关于“公平竞争”的条款规定了不得以任何方式给中间人佣金。()[2013年6月真题]
公司是否对股东派发股利以及比率的高低,主要取决于企业对下列()因素的权衡。
甲公司是一家食品企业。该公司聘请的会计师事务所在对其进行审计时,发现该公司在货币资金内部控制方面存在以下做法。下列关键控制环节中,存在重大缺陷的是()。
下列说法正确的是()①细胞中的相关无机盐离子对于维持神经肌肉的兴奋性非常重要②若哺乳动物血液中Ca2+的含量过低,则会发生抽搐③Mg2+对于植物的光合作用至关重要④Fe2+对于人体内结合与运输O2不可缺少
下列有关我国地理知识的描述,正确的有()。
根据所给资料,回答下列问题。2010年,我国医院总数为20918家,较上年增长627家,医院接待诊疗20.40亿人次,比上年增长1.18亿人次,综合医院接待诊疗人次占全部医院接待诊疗人次的74.1%,是位居第二的中医医院诊疗人次的4.6倍。2010
阅读下列材料:古希腊相对主义者克拉底鲁认为:“人一次也不能踏进同一条河流。”因为人一次踏进这条河时,河水就在流动着,于是这条河就不再是这条河了。古中国相对主义者庄周认为:“方生方死,方死方生;方可方不可,方不可方可。”显然,克拉底鲁表述了一种运动
最新回复
(
0
)