isfou
dupdatethegreatestsumif
CurSum
GreatestSum
GreatestSum
CurSumifalldataare
egativefi
dthegreatesteleme
ti
thearrayif
GreatestSum0
GreatestSumpData0foru
sig
edi
ti1i
Le
gthiifpDatai
GreatestSum
GreatestSumpDatairetur
truea
arraythegreatestsumofallsubarraysu
sig
edi
t
Le
gththele
gthofarray
讨论:上述代码中有两点值得和大家讨论一下:函数的返回值不是子数组和的最大值,而是一个判断输入是否有效的标志。如果函数返回值的是子数组和的最大值,那么当输入一个空指针是应该返回什么呢?返回0?那这个函数的用户怎么区分输入无效和子数组和的最大值刚好是0这两中情况呢?基于这个考
f虑,本人认为把子数组和的最大值以引用的方式放到参数列表中,同时让函数返回一个函数是否正常执行的标志。输入有一类特殊情况需要特殊处理。当输入数组中所有整数都是负数时,子数组和的最大值就是数组中的最大元素。
04-在二元树中找出和为某一值的所有路径
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22和如下二元树1051247则打印出两条路径:1012和1057。二元树结点的数据结构定义为:
structBi
aryTreeNodea
odei
thebi
arytreei
tBi
aryTreeNodeBi
aryTreeNodem_
Valuevalueof
odem_pLeftleftchildof
odem_pRightrightchildof
ode
分析:这是百度的一道笔试题,考查对树这种基本数据结构以及递归函数的理解。当访问到某一结点时,把该结点添加到路径上,并累加当前结点的值。如果当前结点为叶结点并且当前路径的和刚好等于输入的整数,则当前的路径符合要求,我们把它打印出来。如果当前结点不是叶结点,则继续访问它的子结点。当前结点访问结束后,递归函数将自动回到父结点。因此我们在函数退出之前要在路径上删除当前结点并减去当前结点的值,以确保返回父结点时路径刚好是根结点到父结点的路径我们不难看出保存路径的数据结构实际上。是一个栈结构,因为路径要与递归调用状态一致,而递归调用本质就是一个压栈和出栈的过程。参考代码:
Fi
dpathswhosesumequaltoexpectedsumvoidFi
dPathBi
aryTreeNodei
ti
tpTreeNodeexpectedSumcurre
tSuma
odeofbi
arytreetheexpectedsumapathfromroottocurre
t
odethesumofpath
stdvectori
tpath
fr