package com.interview.recursion; import java.util.HashMap; import java.util.Map; /** * http://www.geeksforgeeks.org/custom-tree-problem/ */ public class PrintArrayInCustomizedFormat { void print(char str[][]){ Map<Character,Boolean> visited = new HashMap<Character,Boolean>(); Map<Character,Boolean> alreadyPrinted = new HashMap<Character,Boolean>(); for(int i=0 ; i < str.length; i++){ if(!visited.containsKey(str[i][0]) || !visited.get(str[i][0])){ if(!alreadyPrinted.containsKey(str[i][0]) || !alreadyPrinted.get(str[i][0])){ System.out.println(str[i][0]); alreadyPrinted.put(str[i][0],true); } DFS(str,i,5,visited); } } } private void DFS(char str[][],int pos,int distance,Map<Character,Boolean> visited){ for(int i=0; i < distance; i++){ System.out.print(" "); } System.out.println(str[pos][1]); char ch = str[pos][1]; visited.put(ch, true); int i = pos+1; for(; i < str.length; i++){ if(ch == str[i][0]){ if(i != str.length){ DFS(str,i,distance + 5,visited); } } } } public static void main(String args[]){ char str[][] = {{'a','b'},{'a','c'},{'b','d'},{'c','f'},{'b','e'},{'x','y'},{'y','z'}}; PrintArrayInCustomizedFormat pac = new PrintArrayInCustomizedFormat(); pac.print(str); } }