首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 10
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 10
admin
2014-11-15
145
问题
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数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
程序员面试
相关试题推荐
______isthecenterofourplanetarysystemwasadifficultconcepttograspintheMiddleAges.
TruthinadvertisingisaconceptcentraltotheAmericanfreemarketeconomicsystem.Accordingtothistheory,companiesthat
It’swellknownthatbeingbilingualhascognitivebenefits:switchingbetweentwolanguageshasbeencomparedtomentalgymnast
求最大连续递增数字串(如“ads3sl456789DF3456ld345AA”中的“456789”)
数据库的优化设计?
在WindowsXP的桌面上创建名为“附件”的文件夹图标。
不能显示和编辑备注内容的视图模式是()A.普通视图B.大纲视图C.幻灯片视图D.备注页视图
请在当前幻灯片中的图形前添加一个形状,并输入“技术部”。
论IT服务规划设计IT服务规划设计处于IT服务生命周期的前期,如果前期未进行有效的规划设计,那么仓促而就的IT服务就难以满足客户的真正需求,可能造成IT服务可用性降低、客户满意度低下等问题。为确保有效做好IT服务规划设计,服务供方在IT服务规划设计过程中
随机试题
审计的作用包括()
1.5岁女孩,平时易烦,多汗,前额突出,胸部串珠。腕部X线片见干骺端呈毛刷状改变。血磷、钙均略降低,碱性磷酸酶升高2岁,女孩,平时安静少动,便秘,身高55cm,体重10kg,反应迟钝,前囟大,眼睑肿,鼻梁宽、唇厚舌大。腕部X线片见骨化中心1个,干骺端骨
调节甲状旁腺激素、降钙素分泌的重要因素是()。
两样本均数比较的假设检验,按α=0.05水准,认为差异有显著性,此时若推断有错,其错误的概率是
民事法律关系的客体是民事权利和民事义务共同指向的对象。在货物运输合同关系中,其客体指()。
某企业拥有一办公楼,建成于1996年1月,1998年1月补办了土地使用权出让手续,出让年限为50年(自补办之日算起)。在2006年1月时,建筑物剩余尚可使用经济寿命为45年,则在计算建筑物折旧时,经济寿命应取为()。[2006年考题]
根据财务管理的理论,必要投资收益等于期望投资收益、无风险收益和风险收益之和。( )
某企业本期购进5批存货,发出2批,在物价持续上升的情况下,与加权平均法相比,该企业采用先进先出方法时,()。
下列属于紧急避险的是()。
经A省的防疫部门检测,在该省境内接受检疫的长尾猴中,有1%感染上了狂犬病。但是只有与人及其宠物有接触的长尾猴才接受检疫。防疫部门的专家因此推测,该省长尾猴中感染有狂犬病的比例,将大大小于1%。以下哪项如果为真,将最有力地支持专家的推测?
最新回复
(
0
)