首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 10
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 10
admin
2014-11-15
156
问题
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数22和如下二元树
10
/ \
5 12
/ \
4 7
则打印出两条路径: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/dDmZ777K
0
程序员面试
相关试题推荐
ForAmerica’schildrentheeducationsystemisoftenliterallyalottery.ThatisthemainmessageofanewdocumentaryaboutAm
"Thecatdoesnotofferservices,"WilliamBurroughswrote."Thecatoffersitself."Butitdoessowithunapologeticcontradict
Weakdollarorno,$46,000—thepriceforasingleyearofundergraduateinstructionamidtheredbrickofHarvardYard—is【C1】__
大整数数相乘的问题。
ASP.NET能在那些系统中运行?
在百度中搜索“腊梅”图片。
将远程服务器中名为“通知”的文件在不下载的情况下进行编辑,修改201教室为303教室,然后直接保存,并在关闭编辑窗口后上传。
在幻灯片播放过程中,单击一次鼠标左键会()。A.切换到第一张幻灯片B.切换到最后一张幻灯片C.切换到上一张幻灯片D.切换到下一张幻灯片或本张幻灯片的下一个播放对象
病毒和木马的根本区别是______。
由无线终端组成的MANET网络,与固定局域网最主要的区别是__________(23)。在下图所示的由A、B、C三个结点组成的MANET中,圆圈表示每个结点的发送范围,结点A和结点C同时发送数据,如果结点B不能正常接收,这时结点C称为结点A的_______
随机试题
诺卡菌在液体培养基中形成_________。
反对者认为病人并不一定真正希望结束生命,可能请求之后另有请求。
A、Shewillcontinuewithherdiet.B、Shemightdietanyday.C、Shecan’taffordexpensivefood.D、Sheisoverweight.D男士说“Yoush
鸟氨酸循环合成尿素,一个氮原子来自NH3,另一个来自
某患者脊髓腰段横断外伤后出现尿失禁,其机制是
下列关于货币供给主体的表述,错误的是()。
如图所示,在Access中打开某数据表,下列描述中正确的是()。①数据表名称是:唱片收藏②数据表中共有7条记录③数据表中共有5个字段④其中唱片作者字段的数据类型应为文本
鲁迅笔下的阿Q,对于自己进监牢并不烦恼,而以为“惟有圈而不圆,却是他‘行状’上的一个污点”。不仅如此,鲁迅用一百多字详尽描写“阿Q立志要画得圆”却未能如愿的过程,其用心又是什么?鲁迅在《阿Q正传》中并没有解答的问题却在杂文中显示了解答的钥匙。鲁迅
Thelengthofarectangularkitchenflooris3feetmorethanitswidth.Ifthelengthoftheflooris12feet,whatisthearea
—Hello.PacificAirlines.CanIhelpyou?—Yes.______MynameisAndyPhilips.—Letmecheck.Pleaseholdonaminute...Youare
最新回复
(
0
)