Skip to content

Commit ea3aa94

Browse files
committed
feat: add solutions to lc problem: No.1026
No.1026.Maximum Difference Between Node and Ancestor
1 parent 3ab4275 commit ea3aa94

File tree

3 files changed

+102
-6
lines changed

3 files changed

+102
-6
lines changed

solution/1000-1099/1026.Maximum Difference Between Node and Ancestor/README.md

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,18 +50,17 @@
5050

5151
**方法一:DFS**
5252

53-
对于每个节点,要求其与其祖先节点的最大差值,只需要求出该节点与祖先节点最大值和最小值的差值即可,取较大的差值即可
53+
对于每个节点,求其与祖先节点的最大差值,我们只需要求出该节点与祖先节点最大值和最小值的差值,取所有差值的最大值即可
5454

5555
因此,我们设计一个函数 $dfs(root, mi, mx)$,表示当前搜索到的节点为 $root$,其祖先节点的最大值为 $mx$,最小值为 $mi$,函数内更新最大差值 $ans$。
5656

5757
函数 $dfs(root, mi, mx)$ 的逻辑如下:
5858

59-
- 若 $root$ 为空,则返回。
60-
- 更新 $ans = max(ans, abs(mi - root.val), abs(mx - root.val))$。
61-
- 更新 $mi = min(mi, root.val)$, $mx = max(mx, root.val)$。
62-
- 递归左右子树。
59+
- 若 $root$ 为空,直接返回。
60+
- 否则,我们更新 $ans = max(ans, |mi - root.val|, |mx - root.val|)$。
61+
- 然后更新 $mi = min(mi, root.val)$, $mx = max(mx, root.val)$,并且递归搜索左右子树。
6362

64-
最后返回 $ans$ 即可。
63+
在主函数中,我们调用 $dfs(root, root.val, root.val)$,最后返回 $ans$ 即可。
6564

6665
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为二叉树节点个数。
6766

@@ -220,6 +219,40 @@ func abs(x int) int {
220219
}
221220
```
222221

222+
### **TypeScript**
223+
224+
```ts
225+
/**
226+
* Definition for a binary tree node.
227+
* class TreeNode {
228+
* val: number
229+
* left: TreeNode | null
230+
* right: TreeNode | null
231+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
232+
* this.val = (val===undefined ? 0 : val)
233+
* this.left = (left===undefined ? null : left)
234+
* this.right = (right===undefined ? null : right)
235+
* }
236+
* }
237+
*/
238+
239+
function maxAncestorDiff(root: TreeNode | null): number {
240+
const dfs = (root: TreeNode | null, mi: number, mx: number): void => {
241+
if (!root) {
242+
return;
243+
}
244+
ans = Math.max(ans, Math.abs(root.val - mi), Math.abs(root.val - mx));
245+
mi = Math.min(mi, root.val);
246+
mx = Math.max(mx, root.val);
247+
dfs(root.left, mi, mx);
248+
dfs(root.right, mi, mx);
249+
};
250+
let ans: number = 0;
251+
dfs(root, root.val, root.val);
252+
return ans;
253+
}
254+
```
255+
223256
### **JavaScript**
224257

225258
```js

solution/1000-1099/1026.Maximum Difference Between Node and Ancestor/README_EN.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,40 @@ func abs(x int) int {
189189
}
190190
```
191191

192+
### **TypeScript**
193+
194+
```ts
195+
/**
196+
* Definition for a binary tree node.
197+
* class TreeNode {
198+
* val: number
199+
* left: TreeNode | null
200+
* right: TreeNode | null
201+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
202+
* this.val = (val===undefined ? 0 : val)
203+
* this.left = (left===undefined ? null : left)
204+
* this.right = (right===undefined ? null : right)
205+
* }
206+
* }
207+
*/
208+
209+
function maxAncestorDiff(root: TreeNode | null): number {
210+
const dfs = (root: TreeNode | null, mi: number, mx: number): void => {
211+
if (!root) {
212+
return;
213+
}
214+
ans = Math.max(ans, Math.abs(root.val - mi), Math.abs(root.val - mx));
215+
mi = Math.min(mi, root.val);
216+
mx = Math.max(mx, root.val);
217+
dfs(root.left, mi, mx);
218+
dfs(root.right, mi, mx);
219+
};
220+
let ans: number = 0;
221+
dfs(root, root.val, root.val);
222+
return ans;
223+
}
224+
```
225+
192226
### **JavaScript**
193227

194228
```js
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
15+
function maxAncestorDiff(root: TreeNode | null): number {
16+
const dfs = (root: TreeNode | null, mi: number, mx: number): void => {
17+
if (!root) {
18+
return;
19+
}
20+
ans = Math.max(ans, Math.abs(root.val - mi), Math.abs(root.val - mx));
21+
mi = Math.min(mi, root.val);
22+
mx = Math.max(mx, root.val);
23+
dfs(root.left, mi, mx);
24+
dfs(root.right, mi, mx);
25+
};
26+
let ans: number = 0;
27+
dfs(root, root.val, root.val);
28+
return ans;
29+
}

0 commit comments

Comments
 (0)