首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 则打印出两条路径:10, 12和10, 5, 7。 二元树结点的数据结构定义为: struct
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 则打印出两条路径:10, 12和10, 5, 7。 二元树结点的数据结构定义为: struct
admin
2019-03-29
161
问题
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数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
程序员面试
相关试题推荐
RememberNapsterorGrokster?Bothservicesalloweduserstosharecomputerfiles—usuallydigitalmusic—thatinfringedthecopyr
重载与覆盖的区别
什么是ASP.net中的用户控件
两个单向链表,找出它们的第一个公共结点。链表的结点定义为:structListNode{intm_nKey;ListNode*m_pNext;};
触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。
把个人的信息进行设置,显示图片“火箭发射”,与其他人共享网络摄像机功能。
请打开"计算器"应用程序,利用科学型模式将十六进制的ABC转换为二进制。
请利用“外观和主题”窗口,设置屏幕保护为“字幕”,文字为“全国专业技术人员计算机应用能力考试中,请移动鼠标开始”字体为“黑体”,字号为“72”,颜色为“浅绿色”(请按题目的顺序操作)。
请打开“计算器”应用程序,利用科学型模式将十进制的1234转换为十六进制。
信息安全是一门以人为主,涉及技术、管理和法律的综合学科,同时还与个人道德意识等方面紧密相关。
随机试题
文中“原庄宗之所以得天下,与其所以失之者,可以知之矣”这句话的作用是什么?请解释这段文字中加点字的含义。理:______原:______
下述哪项不是主动脉瓣关闭不全的体征
A.医患关系的物化趋势B.医患关系结构的“人机化”趋势C.医患关系的经济化趋势D.医患要求的多元化趋势E.医患关系的法制化趋势医学高新技术的应用,使诊疗方式发生了巨大的变化,加重了医生对高新技术设备的依赖,指的是
某商业企业2011年向非关联企业销售产品100件,取得不舍税销售额200000元,向一关联企业销售相同产品150件,取得不含税销售额150000元。2013年6月15日,经主管税务机关审查发现。该企业在进行2011年度纳税申报时,未进行相应的纳税调整,税务
张高丽书记在天津市第十次党代会上捉出:切实保障和改善民计民生,进一步构建社会主义和谐社会。请你结合所报岗位和区县实际,就此句话展l丌论述,1500字左右。
在欢美资产阶级革命时代,最能体现出资产阶级革命要求的文献是()。
CPU总线是一种()。
在阶级社会中,占社会统治地位的道德是()
设有变量pi=3.1415926,执行命令?ROUND(pi,3)的显示结果为______。
STOPSMOKINGDoyouwanttostopsmoking?Haveyoualreadytriedtostopbutfailed?Nowit’stimetostopsmokingusingthe
最新回复
(
0
)