首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 则打印出两条路径:10, 12和10, 5, 7。 二元树结点的数据结构定义为: struct
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 则打印出两条路径:10, 12和10, 5, 7。 二元树结点的数据结构定义为: struct
admin
2019-03-29
101
问题
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数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
程序员面试
相关试题推荐
TruthinadvertisingisaconceptcentraltotheAmericanfreemarketeconomicsystem.Accordingtothistheory,companiesthat
输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:因此返回true。如果输入7、4、6、5,没有哪棵树的后序遍历
存储过程和函数的区别
在金山毒霸2008中,阻止下载运行.ActiveX控件。
将桌面背景设置为图片WindowsXP。
在“幻灯片浏览视图”模式下,不允许进行的操作是()A.幻灯片移动和复制B.幻灯片切换C.幻灯片删除D.设置动画效果
请对工作簿Book1的结构和窗口设置保护,使工作簿和工作表不能进行移动和隐藏等操作。
请给学生成绩表的某列“普通物理”设置一个链接其课程简介的超链接。
数据库系统的三级模式分别为()模式、内部级模式与外部级模式。
椭圆曲线密码ECC是一种公开密钥加密算法体制,其密码由六元组T=<p,a,b,G,n,h>表示。用户的私钥d的取值为1._____,公钥Q的取值为2.______。利用ECC实现数字签名与利用RSA实现数字签名的主要区别是3.____
随机试题
[*]
夏季某餐厅供应蛋炒饭引起近百人食物中毒,发病者潜伏期约8小时,以腹痛、腹泻为主要症状,体温正常,经16~36小时全部恢复。经卫生学调查发现蛋炒饭使用的是前一天的剩饭为预防这种食物中毒的发生,剩余食物食前须彻底加热,一般应为
五皮饮的功用是防己黄芪汤的功用是
患儿,3岁。壮热不退,气急鼻扇,张口抬肩,摇身撷肚,口唇发绀,胸闷腹胀,大便秘结。治疗应在正确选方的基础上加()
根据《注册建造师执业工程规模标准》,属于中型规模的非标准设备制安工程量是()。
水利建设市场主体基本信息发布时间为()。
案例三:2008年10月,吴先生年满60岁,从某国企退休。吴先生拥有35年的工龄,退休前每月收入为6000元,当地社会平均收入为2000元,退休时国家基本养老金个人账户积累总额54000元,过渡性养老金政策即工龄×5元。吴先生参加了企业养老金计划,供款15
某村附近一化工厂超标排放污水,致农作物大幅减产,多次被该县环境保护主管部门处理。去年村民李某患了癌症,认为所患疾病与化工厂排污有关,遂向人民法院提起诉讼,要求化工厂停止生产,并赔偿各项损失共计50万元。李某提交了诊断证明、污水样品的监测报告,化工厂辩称,本
不超过100名的小朋友站成一列。如果从第一人开始依次按1,2,3,……,9的顺序循环报数,最后一名小朋友报的是7;如果按1,2,3,……,11的顺序循环报数,最后一名小朋友报的是9,那么一共有多少名小朋友:
请选出正确答案。例如:她很活泼,说话很有趣,总能给我们带来快乐,我们都很喜欢和她在一起。★她是个什么样的人?A幽默√B马虎C骄傲D害羞他不是我的男朋友,是我叔叔的儿子,也就是我的弟弟,大学刚毕业,来北京看我
最新回复
(
0
)