Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ad24b1f

Browse files
添加(0116.填充每个节点的下一个右侧节点指针.md):增加typescript版本
1 parent a6ce79a commit ad24b1f

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

‎problems/0116.填充每个节点的下一个右侧节点指针.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,79 @@ const connect = root => {
287287
};
288288
```
289289

290+
## TypeScript
291+
292+
(注:命名空间‘Node’与typescript中内置类型冲突,这里改成了‘NodePro’)
293+
294+
> 递归法:
295+
296+
```typescript
297+
class NodePro {
298+
val: number
299+
left: NodePro | null
300+
right: NodePro | null
301+
next: NodePro | null
302+
constructor(val?: number, left?: NodePro, right?: NodePro, next?: NodePro) {
303+
this.val = (val === undefined ? 0 : val)
304+
this.left = (left === undefined ? null : left)
305+
this.right = (right === undefined ? null : right)
306+
this.next = (next === undefined ? null : next)
307+
}
308+
}
309+
310+
function connect(root: NodePro | null): NodePro | null {
311+
if (root === null) return null;
312+
root.next = null;
313+
recur(root);
314+
return root;
315+
};
316+
function recur(node: NodePro): void {
317+
if (node.left === null || node.right === null) return;
318+
node.left.next = node.right;
319+
node.right.next = node.next && node.next.left;
320+
recur(node.left);
321+
recur(node.right);
322+
}
323+
```
324+
325+
> 迭代法:
326+
327+
```typescript
328+
class NodePro {
329+
val: number
330+
left: NodePro | null
331+
right: NodePro | null
332+
next: NodePro | null
333+
constructor(val?: number, left?: NodePro, right?: NodePro, next?: NodePro) {
334+
this.val = (val === undefined ? 0 : val)
335+
this.left = (left === undefined ? null : left)
336+
this.right = (right === undefined ? null : right)
337+
this.next = (next === undefined ? null : next)
338+
}
339+
}
340+
341+
function connect(root: NodePro | null): NodePro | null {
342+
if (root === null) return null;
343+
const queue: NodePro[] = [];
344+
queue.push(root);
345+
while (queue.length > 0) {
346+
for (let i = 0, length = queue.length; i < length; i++) {
347+
const curNode: NodePro = queue.shift()!;
348+
if (i === length - 1) {
349+
curNode.next = null;
350+
} else {
351+
curNode.next = queue[0];
352+
}
353+
if (curNode.left !== null) queue.push(curNode.left);
354+
if (curNode.right !== null) queue.push(curNode.right);
355+
}
356+
}
357+
return root;
358+
};
359+
```
360+
361+
362+
290363

291364
-----------------------
292365
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /