首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 则打印出两条路径:10, 12和10, 5, 7。 二元树结点的数据结构定义为: struct
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 则打印出两条路径:10, 12和10, 5, 7。 二元树结点的数据结构定义为: struct
admin
2019-03-29
102
问题
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数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://jikaoti.com/ti/bag7FFFM
0
程序员面试
相关试题推荐
TruthinadvertisingisaconceptcentraltotheAmericanfreemarketeconomicsystem.Accordingtothistheory,companiesthat
ForAmerica’schildrentheeducationsystemisoftenliterallyalottery.ThatisthemainmessageofanewdocumentaryaboutAm
Writeanessaybasedonthefollowingoutline.Youshouldwriteabout150wordsontheANSWERSHEET.1.教师用课外时间给学生补课赚钱的现象
大概描述一下ASP。NET服务器控件的生命周期
将一整数逆序后放入一数组中(要求递归实现)
触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。
请打开"计算器"应用程序,利用科学型模式将十六进制的ABC转换为二进制。
在foxpro中定义数据库结构时,字段名的宽度最多可以是()。A.2B.4C.10D.16
论IT服务监督管理监督管理是依据国家IT服务标准对IT服务进行整体评价,并对供方的服务过程、交付结果实施监督和绩效评估。在监督管理环节,需要采取适当的方法,对IT服务全生命周期各个阶段的过程和质量进行度量与评价,并对服务供方的服务过程、交付结果实施监理,
RIPv1与RIPv2的区别是()。
随机试题
未成年人郭某涉嫌犯罪被检察院批准逮捕。在审查起诉中,经羁押必要性审查,拟变更为取保候审并适用保证人保证。关于保证人,下列说法错误的是()。
改正下面句子中的语法错误,并说明理由:她音色美丽,音域宽广,被在场的音乐家们吸引住了。
溶酶体增大增多的原因是
以侵犯骨骼肌和皮肤为主,由自身免疫介导的慢性炎症性系统性结缔组织病的是累及全身多个系统的自身免疫性疾病,以育龄女性为多的是
肝胃不和、胎气上逆引起妊娠恶阻,治疗时首选方剂是
在下列各项中,属于记帐凭证必须具备的基本内容有()。
当红、橙、黄、绿、青、蓝、紫七种光会聚一点时,该点呈()。
小高到超市买水果,售货员问他想买什么水果,小高说:“我不像讨厌荔技那样讨厌苹果,我不像讨厌梨那样讨厌葡萄,我不像喜欢柑橘那样喜欢苹果,我对葡萄不如对荔枝那样喜欢。”小高最后会选择的水果是()。
给定资料1.2013年,听到家里的“顶梁柱”遭遇车祸去世的噩耗时,41岁的徐某抱着女儿痛哭不已。尽管法院判决肇事司机赔偿徐某一家22万余元,但被执行人却无可供执行的财产。女儿在念高中,公婆则卧病在床,无论是学杂费还是医药费,对于这个贫困的农村家庭
x4将其余各列都加到第一列.
最新回复
(
0
)