Skip to content

Commit 544aca5

Browse files
authored
Update Readme.md
1 parent 5a2a43a commit 544aca5

File tree

1 file changed

+9
-5
lines changed
  • Tree/1740.Find-Distance-in-a-Binary-Tree

1 file changed

+9
-5
lines changed
Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
### 1740.Find-Distance-in-a-Binary-Tree
22

3-
解决Lowest Common Ancestor (LCA)的一个递归套路是:定义dfs(node, p, q),返回值是一个pair,包含node与子节点p的距离、node与子节点q的距离。如果node下属没有子节点是p和q,那么对应的值是-1.
3+
很显然,本题中的那个“拐点”必然是两个节点的LCA。
4+
5+
本题的解法可以很暴力,直接寻找从root到p与q分别的路径,根据记录路径然后找出LCA分别到p和q的长度。
6+
7+
更加节省空间的方法就是纯递归。在LC236的想法里,dfs(node)返回的是该节点的子树里包含了多少个p或者q。在本题中,我们可以有类似的思想:定义dfs(node)的返回值是一个pair,包含node与p的距离、node与q的距离。如果node下属没有子节点是p和q,那么对应的值是-1.
48

59
先分别递归```ans1 = dfs(node->left, p, q)``````ans2 = dfs(node->left, p, q)```. 分情况讨论:
6-
1. 如果ans1->first!=-1,那么说明node到p的距离是ans1->first+1
7-
2. 如果ans2->first!=-1,那么说明node到p的距离是ans2->first+1
8-
3. 如果node->val==p,那么说明node到p的距离是0
10+
1. 如果已知左节点到p的距离x,那么说明node到p的距离是x+1
11+
2. 如果已知右节点到p的距离x,那么说明node到p的距离是x+1
12+
3. 如果node本身就是p,那么说明node到p的距离是0
913
4. 其余的情况,node到p的距离标记为-1
1014

1115
同理,处理对于node到q的距离处理。
1216

13-
如果第一次出现node到p和q的距离都不是-1,那么node就是p和q的LCA。答案就是两距离之和。
17+
因为递归是从下往上走的,如果第一次出现node到p和q的距离都不是-1,那么node就是p和q的LCA。答案就是两距离之和。

0 commit comments

Comments
 (0)