首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 10
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 10
admin
2014-11-15
113
问题
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数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
程序员面试
相关试题推荐
RememberNapsterorGrokster?Bothservicesalloweduserstosharecomputerfiles—usuallydigitalmusic—thatinfringedthecopyr
It’swellknownthatbeingbilingualhascognitivebenefits:switchingbetweentwolanguageshasbeencomparedtomentalgymnast
输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。
从当前界面上的菜单或“网络任务”开始创建拨号连接,通过Modem连接到In-ternet,拨号时先拨0,再拨16300,用户名和密码均为16300,将创建的连接的名称命名为:linkl,然后在桌面上创建一个到此连接的快捷方式。除此之外,其余选项均使用默认设
对于PPoint中的视图模式,以下说法错误的是()。A.幻灯片浏览视图下不能设置放映方式B.幻灯片视图注重于对幻灯片的文本和对象进行详细操作C.每种视图模式在演示文稿的制作和显示中有不同的作用D.大纲视图便于查看和编排演示文稿的大纲
在“幻灯片浏览视图”模式下,不允许进行的操作是()A.幻灯片移动和复制B.幻灯片切换C.幻灯片删除D.设置动画效果
在foxpro中定义数据库结构时,字段名的宽度最多可以是()。A.2B.4C.10D.16
信息安全是一门以人为主,涉及技术、管理和法律的综合学科,同时还与个人道德意识等方面紧密相关。
随机试题
《聊斋志异》的艺术成就。
西周以后,文献中频繁出现“皇天”、“上天”、“曼天”、“昊天”、“苍天”,表明一种信仰已广泛流传。这种信仰是()
破伤风治疗中,不正确的是尽早应用
烧伤休克的特点
1~8:某多层办公楼为现浇钢筋混凝土框架结构,抗震等级为二级,混凝土强度等级为C30,梁、柱纵向钢筋采用HRB335级钢筋,梁、柱箍筋采用HPB235级钢筋。其首层入口处雨篷的平面图与剖面图如图5-1所示。当雨篷梁(即支承雨篷的框架梁)按箍筋间
甲、乙、丙、丁均为外商投资企业。其中:甲、乙为有限责任公司;丙为上市的股份有限公司;丁为非上市的股份有限公司。下列有关上述企业相互之间合并后企业组织形式的表述中,不符合外商投资企业法律制度规定的是()。
下列关于法律责任的表述中,正确的是()。
3,30,29,12,()
关于配置管理的描述中,错误的是()。
What’sTom’stelephonenumber?
最新回复
(
0
)