1 file changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -40,6 +40,26 @@ return true, as there exist a root-to-leaf path `5->4->11->2` which sum is 22.
40
40
41
41
## Solve:
42
42
43
+ ###### ▉ 问题分析
44
+
45
+ > 1)搜索从根节点到叶子节点能够达到目标值,毋庸置疑,一看到检索二叉搜索树,就应该想起递归。
46
+ >
47
+ > 2)第一个想法就是一个个进行相加,将每条路径相加完成之后,判断是否达到当前目标值?
48
+ >
49
+ > 3)但是 (2)的解决方案的想法要用到递归上,需要转变一下思路,毕竟我们要用递归的编程技巧来解决,所以思维需要稍微转变一下(将问题化成子问题,子问题与总问题有相同的解决思路)。
50
+
51
+
52
+
53
+ ###### ▉ 算法思路
54
+
55
+ > 1)既然要用到递归来解决,这样来想,每遍历一个结点,我们就用 sum 减去当前结点,然后问题就会变成从当前结点到叶子节点能够满足 sum 减去当前结点的值,那么就存在满足条件的路径。
56
+ >
57
+ > 2)在(1)中,将问题化成子问题,然后子问题和问题有相同的解决思路,那么就可以使用递归来解决。
58
+ >
59
+ > 3)用 flag 做标识,一旦满足路径之和等于目标值,就让改变 flag 的状态。
60
+
61
+
62
+
43
63
###### ▉ 代码实现
44
64
45
65
``` javascript
@@ -49,10 +69,14 @@ return true, as there exist a root-to-leaf path `5->4->11->2` which sum is 22.
49
69
if (root == null ) return false ;
50
70
51
71
dfs = (root ,sum )=> {
72
+ // 如果当前结点为 null ,返回 false
52
73
if (root == null ) return false ;
74
+ // 判断左右子树是否为 null
53
75
if (root .left == null && root .right == null ){
76
+ // 如果不为 null,就判断当前的值和最后一个结点值是否相同
54
77
if (sum == root .val ){
55
78
flag = true ;
79
+ return ;
56
80
}
57
81
}
58
82
// 递归搜索所有路径
0 commit comments