欢迎光临散文网 会员登陆 & 注册

算法:二叉树中和为某一值的路径

2022-08-24 10:06 作者:做架构师不做框架师  | 我要投稿


给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。


叶子节点 是指没有子节点的节点。

示例1

  • 输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22

  • 输出:[[5,4,11,2],[5,8,4,5]]


提示

  • 树中节点总数在范围 [0, 5000] 内

  • -1000 <= Node.val <= 1000

  • -1000 <= targetSum <= 1000


方法:深度优先搜索

从根开始计算,到找到某个节点的解,深度优先搜索(回溯)采用“一直向下走,走不通就掉头”的思想,相当于采用了“先跟遍历”的方法来构造搜索树。


算法如下:

  • 递归当前节点,如果当前节点为空,直接返回;

  • 否则目标和递减,用于判断是否满足目标和;

  • 把当前节点的值加入到每一个路径集合中;

  • 当目标和递减到0并且当前节点没有子节点,说明满足条件,直接把当前路径集合“复制”(因为路径集合是动态的)到结果集合中;

  • 递归遍历左/右子节点;

  • 向上回溯,需要将当前节点从路径集合中移除;

  • 递归遍历整个树节点完成后,返回结果集合;


代码如下:

复杂度分析

  • 时间复杂度:O(n),因为要先序遍历所有的节点。

  • 空间复杂度:O(n),最差的情况下,所有节点的都满足,即整个二叉树都存到结果集合中。


END

绳锯木断,水滴石穿,赠友人。

好兄弟可以点赞并关注我的公众号“javaAnswer”,全部都是干货。


算法:二叉树中和为某一值的路径的评论 (共 条)

分享到微博请遵守国家法律