Skip to content

Commit ef38ac1

Browse files
committedMay 10, 2019
题目详细解析
1 parent 478ebd0 commit ef38ac1

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed
 

‎PathSum.md

+24
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,26 @@ return true, as there exist a root-to-leaf path `5->4->11->2` which sum is 22.
4040

4141
## Solve:
4242

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+
4363
###### ▉ 代码实现
4464

4565
```javascript
@@ -49,10 +69,14 @@ return true, as there exist a root-to-leaf path `5->4->11->2` which sum is 22.
4969
if(root == null) return false;
5070

5171
dfs = (root,sum)=>{
72+
// 如果当前结点为 null ,返回 false
5273
if(root == null) return false;
74+
// 判断左右子树是否为 null
5375
if(root.left == null && root.right == null){
76+
// 如果不为 null,就判断当前的值和最后一个结点值是否相同
5477
if(sum == root.val){
5578
flag = true;
79+
return;
5680
}
5781
}
5882
// 递归搜索所有路径

0 commit comments

Comments
 (0)
Failed to load comments.