Skip to content

Commit 3878338

Browse files
committed
Add traversePostOrderNAry TypeScript goody
Tested on LeetCode: https://leetcode.com/problems/n-ary-tree-postorder-traversal/submissions/1368487878/
1 parent 96d3794 commit 3878338

File tree

5 files changed

+54
-20
lines changed

5 files changed

+54
-20
lines changed

workspaces/adventure-pack/goodies/typescript/traverseInOrder/index.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@ export function* traverseInOrder<
22
T extends { left?: T | null | undefined; right?: T | null | undefined },
33
>(root: T | null | undefined): Generator<T, void, void> {
44
const stack: [T | null | undefined, boolean][] = [[root, false]];
5-
while (stack.length > 0) {
5+
6+
do {
67
const [node, didTraverseLeftChild] = stack.pop()!;
7-
if (node) {
8-
if (didTraverseLeftChild) {
9-
yield node;
10-
} else {
11-
stack.push([node.right, false], [node, true], [node.left, false]);
12-
}
8+
if (node == null) {
9+
continue;
1310
}
14-
}
11+
12+
if (didTraverseLeftChild) {
13+
yield node;
14+
continue;
15+
}
16+
17+
stack.push([node.right, false], [node, true], [node.left, false]);
18+
} while (stack.length > 0);
1519
}

workspaces/adventure-pack/goodies/typescript/traverseLevelOrder/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ import { isNonNullish } from "../isNonNullish";
33
export function* traverseLevelOrder<
44
T extends { left?: T | null | undefined; right?: T | null | undefined },
55
>(root: T | null | undefined): Generator<T[], void, void> {
6-
if (!root) {
6+
if (root == null) {
77
return;
88
}
99

1010
let level = [root];
1111
do {
1212
yield level;
13+
1314
level = level
1415
.flatMap((node) => [node.left, node.right])
1516
.filter(isNonNullish);

workspaces/adventure-pack/goodies/typescript/traversePostOrder/index.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@ export function* traversePostOrder<
22
T extends { left?: T | null | undefined; right?: T | null | undefined },
33
>(root: T | null | undefined): Generator<T, void, void> {
44
const stack: [T | null | undefined, boolean][] = [[root, false]];
5-
while (stack.length > 0) {
5+
6+
do {
67
const [node, didTraverseChildren] = stack.pop()!;
7-
if (node) {
8-
if (didTraverseChildren) {
9-
yield node;
10-
} else {
11-
stack.push([node, true], [node.right, false], [node.left, false]);
12-
}
8+
if (node == null) {
9+
continue;
1310
}
14-
}
11+
12+
if (didTraverseChildren) {
13+
yield node;
14+
continue;
15+
}
16+
17+
stack.push([node, true], [node.right, false], [node.left, false]);
18+
} while (stack.length > 0);
1519
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
export function* traversePostOrderNAry<T extends { children: T[] }>(
2+
root: T | null | undefined,
3+
): Generator<T, void, void> {
4+
const stack: [T | null | undefined, boolean][] = [[root, false]];
5+
6+
do {
7+
const [node, didTraverseChildren] = stack.pop()!;
8+
if (node == null) {
9+
continue;
10+
}
11+
12+
if (didTraverseChildren) {
13+
yield node;
14+
continue;
15+
}
16+
17+
stack.push([node, true]);
18+
// TODO: add an Array.prototype.valuesReversed() goody and use it here
19+
for (let i = node.children.length - 1; i >= 0; --i) {
20+
stack.push([node.children[i], false]);
21+
}
22+
} while (stack.length > 0);
23+
}

workspaces/adventure-pack/goodies/typescript/traversePreOrder/index.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ export function* traversePreOrder<
22
T extends { left?: T | null | undefined; right?: T | null | undefined },
33
>(root: T | null | undefined): Generator<T, void, void> {
44
const stack = [root];
5-
while (stack.length > 0) {
5+
6+
do {
67
const node = stack.pop();
7-
if (node) {
8+
9+
if (node != null) {
810
yield node;
911
stack.push(node.right, node.left);
1012
}
11-
}
13+
} while (stack.length > 0);
1214
}

0 commit comments

Comments
 (0)