Skip to content

Commit 70111cb

Browse files
committed
Added solution for - Reverse Odd Levels Of Binary Tree
1 parent 42b5e17 commit 70111cb

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import java.util.ArrayList;
2+
import java.util.List;
3+
4+
public class ReverseOddLevelsOfBinaryTree {
5+
/**
6+
Store all the level's data in a list by simply any traversal(pre-order here)
7+
Then again traverse the tree and when found the odd level,
8+
change the root data with the last element of the level-list and remove the last item
9+
*/
10+
public TreeNode reverseOddLevels(TreeNode root) {
11+
List<List<Integer>> list = new ArrayList<>();
12+
tra(list, root, 0);
13+
modify(list, root, 0);
14+
return root;
15+
}
16+
private void modify(List<List<Integer>> res, TreeNode root, int level){
17+
if(root == null) return;
18+
19+
// Odd level
20+
if((level%2) != 0){
21+
22+
// Modify root data with last item of list, and then remove the last item
23+
List<Integer> lvlArr = res.get(level);
24+
root.val = lvlArr.get(lvlArr.size()-1);
25+
lvlArr.remove(lvlArr.size()-1);
26+
}
27+
28+
modify(res,root.left,level+1);
29+
modify(res,root.right,level+1);
30+
}
31+
32+
// generate list with level-order items
33+
private void tra(List<List<Integer>> res, TreeNode root, int level){
34+
if(root == null) return;
35+
36+
if(level >= res.size())
37+
res.add(new ArrayList<>());
38+
39+
res.get(level).add(root.val);
40+
tra(res,root.left,level+1);
41+
tra(res,root.right,level+1);
42+
}
43+
44+
static class TreeNode{
45+
int val;
46+
TreeNode left;
47+
TreeNode right;
48+
49+
public TreeNode() {}
50+
TreeNode(int val) { this.val = val; }
51+
public TreeNode(int val, TreeNode left, TreeNode right) {
52+
this.val = val;
53+
this.left = left;
54+
this.right = right;
55+
}
56+
}
57+
}

0 commit comments

Comments
 (0)