Skip to content

Commit 311b9c1

Browse files
binary tree traverse
1 parent 63f9ff8 commit 311b9c1

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed
+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
* Given a binary tree, return the inorder traversal of its nodes' values.
3+
4+
Example:
5+
6+
Input: [1,null,2,3]
7+
1
8+
\
9+
2
10+
/
11+
3
12+
13+
Output: [1,3,2]
14+
Follow up: Recursive solution is trivial, could you do it iteratively?
15+
*/
16+
const traverse = (node, result) => {
17+
if (node !== null) {
18+
if (node.left !== null) {
19+
traverse(node.left, result);
20+
}
21+
result.push(node.val);
22+
if (node.right !== null) {
23+
traverse(node.right, result);
24+
}
25+
}
26+
}
27+
const inOrderTraversal = root => {
28+
const result = [];
29+
30+
traverse(root, result);
31+
32+
return result;
33+
}
34+
35+
// Iterative solution
36+
const inorderTraversal = root => {
37+
const result = [];
38+
const stack = [];
39+
let curr = root;
40+
41+
while (curr !== null || stack.length()) {
42+
while (curr !== null) {
43+
stack.push(curr);
44+
curr = curr.left;
45+
}
46+
curr = stack.pop();
47+
result.push(curr.val);
48+
curr = curr.right;
49+
}
50+
51+
return result;
52+
}

exercises/leetcode/zigzagTraversal.js

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
3+
4+
For example:
5+
Given binary tree [3,9,20,null,null,15,7],
6+
3
7+
/ \
8+
9 20
9+
/ \
10+
15 7
11+
return its zigzag level order traversal as:
12+
[
13+
[3],
14+
[20,9],
15+
[15,7]
16+
]
17+
*/
18+
19+
const traverseZigzag = (node, level, output) => {
20+
if (!node) {
21+
return output;
22+
}
23+
24+
if (output.length === level) {
25+
output.push([]);
26+
}
27+
28+
if (level % 2 !== 0) {
29+
output[level].unshift(node.val);
30+
} else {
31+
output[level].push(node.val);
32+
}
33+
34+
traverseZigzag(node.left, level + 1, output);
35+
traverseZigzag(node.right, level + 1, output);
36+
}
37+
38+
const zigzagLevelOrder = root => {
39+
const output = [];
40+
41+
traverseZigzag(root, 0, output);
42+
43+
return output;
44+
}

0 commit comments

Comments
 (0)