首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 10
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 10
admin
2014-11-15
98
问题
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数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://jikaoti.com/ti/sig7FFFM
0
程序员面试
相关试题推荐
ForAmerica’schildrentheeducationsystemisoftenliterallyalottery.ThatisthemainmessageofanewdocumentaryaboutAm
It’swellknownthatbeingbilingualhascognitivebenefits:switchingbetweentwolanguageshasbeencomparedtomentalgymnast
Signslike"Pleaseratemefivestars"pointtoagrowingproblemwithbusinessesintheon-demandeconomyofapp-basedservices
输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。
输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:{intm_nKey;ListNode*m_pNext;};
在邮件中设置图片背景。
在当前窗口界面中,根据“添加打印机”向导,安装网络打印机,输入名称为“\\192.168.18.18\MicrosoftXPSDocumentWriter”。
若按下Shift键同时用鼠标分别单击幻灯片中的标题、文本和图片对象,则()。A.仅最后单击的对象被选中B.三个对象被同时选中C.仅标题对象被选中D.仅图形对象被选中
下列不属于软件调试技术的是()。
信息安全包括四大要素:技术、制度、流程和()。
随机试题
怎样根据焊件的不同要求来选用降低应力与减少变形的方法?
牲畜宰杀后最适宜食用的时间是在()。
甲国公民索文在日本购买了由日产的电器.索文来中国工作时也携带了该电器,在中国使用的过程中因电器的零件质量存在问题,导致索文受伤。索文就产品责任问题在中国某法院起诉。依我国《涉外民事关系法律适用法》的规定,下列哪些选项是正确的?()
债务履行期届满而抵押权人未受清偿的,抵押权人可以( )。
以下属于风险管理策略的是()。①风险规避②风险分散③风险对冲④风险补偿与准备金
(2008年考试真题)甲、乙等6人设立了一普通合伙企业,并委托甲和乙执行合伙企业事务,甲对乙执行的事务提出异议,其他合伙人对如何解决此问题也产生了争议,由于合伙协议未约定争议解决的表决办法,合伙人实行了一人一票的表决办法,后经全体合伙人过半数表决通过了同意
提高教育质量,培养高素质人才的关键在于()。
下列情形中,可以认定为自首的有()。
近年来,以高铁站为依托的高铁新城在我国逐渐兴起。高铁站选址与高铁新城建设的一般规律是()。
A、TheyareatMichael’s.B、TheywilltreatMichael.C、TheyaregoingtoMichael’s.D、Theywillgohomebysubway.A由对话中女士提到的hit
最新回复
(
0
)