Skip to content

Commit 41c90a6

Browse files
committed
Added solution to construct tree given cartesian traversal
1 parent 602a510 commit 41c90a6

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.eprogrammerz.examples.algorithm.trees;
2+
3+
import org.junit.Test;
4+
5+
import java.util.ArrayList;
6+
import java.util.Arrays;
7+
import java.util.List;
8+
9+
public class CartesianTree {
10+
private class Node {
11+
int val;
12+
Node left;
13+
Node right;
14+
Node(int val) {
15+
this.val = val;
16+
}
17+
}
18+
19+
Node buildTree(List<Integer> traversal) {
20+
int rootIdx = findRootIdx(traversal);
21+
if (rootIdx < 0 || rootIdx >= traversal.size()) {
22+
return null;
23+
}
24+
25+
Node root = new Node(traversal.get(rootIdx));
26+
root.left = buildTree(traversal.subList(0, rootIdx));
27+
root.right = buildTree(traversal.subList(rootIdx + 1, traversal.size()));
28+
return root;
29+
}
30+
31+
private int findRootIdx(List<Integer> traversal) {
32+
int max = Integer.MIN_VALUE;
33+
int idx = -1;
34+
for (int i = 0; i < traversal.size(); i++) {
35+
if (traversal.get(i) > max) {
36+
max = traversal.get(i);
37+
idx = i;
38+
}
39+
}
40+
return idx;
41+
}
42+
43+
@Test
44+
public void testBuildTree() {
45+
List<Integer> traversal = new ArrayList<>();
46+
traversal.add(1);
47+
traversal.add(3);
48+
traversal.add(7);
49+
traversal.add(5);
50+
Node root = buildTree(traversal);
51+
System.out.println(root);
52+
}
53+
}

0 commit comments

Comments
 (0)