首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 则打印出两条路径:10, 12和10, 5, 7。 二元树结点的数据结构定义为: struct
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 则打印出两条路径:10, 12和10, 5, 7。 二元树结点的数据结构定义为: struct
admin
2019-03-29
150
问题
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数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
程序员面试
相关试题推荐
______isthecenterofourplanetarysystemwasadifficultconcepttograspintheMiddleAges.
"Thecatdoesnotofferservices,"WilliamBurroughswrote."Thecatoffersitself."Butitdoessowithunapologeticcontradict
[A]Theperson-skillsmatchapproachtoselection[B]Theimpactsofbadselectiondecisions[C]Theimportanceofstructu
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。
2005年11月15日华为软件研发笔试题。实现一单链表的逆转。
根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:namespacetest{publicdelegatevoidOnDBOperate();publicclassUserControlBase
将桌面背景设置为图片WindowsXP。
任何一个团队从开始组建到最终达到绩效要求,需要一个周期。依据塔克曼群体发展模型,结合IT服务管理工作特性,将团队建设周期分为四个阶段,它们分别是(未按正确次序排列):①风暴期②表现期③组建期④规范期团队建设周期的正确排序为______。
IT服务风险管理中,风险的监控是指跟踪已识别的危险,检测残余风险和识别新的风险,保证风险计划的执行,并评价这些计划对减轻风险的有效性。风险监控是整个生命周期中一个持续进行的过程。下面______不是风险监控的基本方法。
随机试题
下列关于近曲小管的描述,错误的是
下列不是临床死亡期特征的是
患者,男,46岁,体重60kg。因急性肠梗阻3天入院,发病后未进食,现诉口渴,全身乏力,不能起坐。检查:脉搏100次/分,血压100/60mmHg,眼窝凹陷,皮肤弹性差,24小时尿量1000ml。血红蛋白170g/L,血细胞比容0.53,血清钠134mmo
根据《工程建设项目勘察设计招标投标办法》的规定,招标文件要求投标人提交投标保证金的,保证金数额一般不超过勘察设计费投标报价的(),最多不超过10万元人民币。
用友软件中,下列关于操作员的说法正确的是()。
在Excel数据清单中,按某一字段内容进行归类,并对每一类作出统计的操作是()。
从所给的四个选项中,选择最合适的一个填入问号处,使之呈现一定的规律。
大学生身处国家发展的重要战略机遇期,面临着难得的人生机遇,也面临着艰巨的生活挑战,在人生实践中会遇到各种各样的矛盾和困难,需要端正人生态度。端正人生态度,应当做到()
关于政府采购法的描述,正确的是(6)。
Thisroadaccidentpromptedareviewofschoolsafetypolicyregardingschoolbuses.
最新回复
(
0
)