fork(7) download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7.  
  8. class Ideone {
  9.  
  10. public class Node {
  11.  
  12. public int data;
  13. public Node left;
  14. public Node right;
  15.  
  16. public Node(int newdata){
  17. this.data = newdata;
  18. this.left = this.right = null;
  19. }
  20.  
  21. public String toString(){
  22. return String.valueOf(data);
  23. }
  24.  
  25. public Node clone(){
  26.  
  27. Node nNode = new Node(this.data);
  28. if(this.left != null) nNode.left = this.left.clone();
  29. if(this.right != null) nNode.right = this.right.clone();
  30.  
  31. return nNode;
  32. }
  33.  
  34. }
  35.  
  36. public void createAllTopologies(int n){
  37.  
  38. if(n%2 == 0) return;
  39.  
  40. Map<Integer, List<Node>> topologies = new HashMap<Integer, List<Node>>();
  41.  
  42. topologies.put(1, new ArrayList<Node>());
  43. topologies.get(1).add(new Node(1));
  44.  
  45. for(int i=3;i<=n;i+=2){
  46.  
  47. List<Node> list = new ArrayList<Node>();
  48.  
  49. for(int j=1;j<i;j+=2){
  50. List<Node> left = topologies.get(j);
  51. List<Node> right = topologies.get(i-j-1);
  52. list.addAll(generateAllCombinations(left,right));
  53. }
  54. topologies.put(i, list);
  55. }
  56.  
  57. List<Node> result = topologies.get(n);
  58.  
  59. for(int i=0;i<result.size();i++){
  60. printTree(result.get(i),0);
  61. System.out.println("-----------------------------");
  62. }
  63.  
  64. }
  65.  
  66. private List<Node> generateAllCombinations(List<Node> left, List<Node> right) {
  67.  
  68. List<Node> list = new ArrayList<Node>();
  69. for(int i=0;i<left.size();i++){
  70. for(int j=0;j<right.size();j++){
  71. Node nNode = new Node(1);
  72. nNode.left = left.get(i).clone();
  73. nNode.right = right.get(j).clone();
  74. list.add(nNode);
  75. }
  76. }
  77. return list;
  78. }
  79.  
  80. protected void printTree(Node nNode,int pos){
  81. if (nNode==null) {
  82. for(int i=0;i<pos;i++) System.out.print("\t");
  83. System.out.println("*");
  84. return;
  85. }
  86. printTree(nNode.right,pos+1);
  87. for(int i=0;i<pos;i++) System.out.print("\t");
  88. System.out.println(nNode.data);
  89. printTree(nNode.left,pos+1);
  90.  
  91. }
  92.  
  93. public static void main (String[] args) throws java.lang.Exception
  94. {
  95. Ideone topologyCreator = new Ideone();
  96. topologyCreator.createAllTopologies(7);
  97. }
  98. }
  99.  
Success #stdin #stdout 0.08s 380160KB
stdin
Standard input is empty
stdout
				*
			1
				*
		1
				*
			1
				*
	1
			*
		1
			*
1
		*
	1
		*
-----------------------------
			*
		1
			*
	1
				*
			1
				*
		1
				*
			1
				*
1
		*
	1
		*
-----------------------------
			*
		1
			*
	1
			*
		1
			*
1
			*
		1
			*
	1
			*
		1
			*
-----------------------------
		*
	1
		*
1
				*
			1
				*
		1
				*
			1
				*
	1
			*
		1
			*
-----------------------------
		*
	1
		*
1
			*
		1
			*
	1
				*
			1
				*
		1
				*
			1
				*
-----------------------------