最后更新于
最后更新于
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
说明: 叶子节点是指没有子节点的节点。
示例:
比较直接的思路是广度优先搜索. 结合队列, 从根节点开始, 搜索这个结点连接的所有子节点, 将子节点, 以及到此子节点为止路径之和压入到队列当中. 然后从队列中按照先入先出的原则依次取出节点, 同上所有子节点并压入队列, 不断循环, 直到遇到叶子结点且此时路径和为指定的sum
值, 返回True
, 否则直到队列为空终止, 并返回False
.
使用DFS思路绕一些, 需要通过递归实现. 首先, 我们得沿着一条路走到黑, 父节点将问题交给子节点时, 问题就转换成了以该子节点为根节点的二叉树, 是否存在从根节点到叶子结点的路径和为sum-parnet.value
. 其中对于整个树的根节点来说就是指定的目标和, parnet.value
对于整个树的根节点来说是根节点的值. 按照这个思路递归下去, 遇到下面两种情况返回:
root为None, 说明其父节点为叶子结点, 这条路径无法满足, 返回False
root为叶子节点且值正好等于剩余的sum
值, 返回True
代码如下: