1 private static void DFS(Deque<String> in,Stack<String> stack,Deque<String> out) { 2 if(0==in.size()) //输入队列空了 3 { 4 if(0==stack.size()) //栈也空了 输出结果 5 { 6 for(Object obj:out.toArray()) 7 System.out.print(obj); 8 System.out.println(); 9 } 10 else //此时 输入队列空了,栈非空 则出栈处理 11 { 12 out.addLast(stack.pop()); 13 DFS(in,stack,out); 14 } 15 } 16 else 17 { 18 if(0==stack.size()) //栈空就入栈 19 { 20 stack.push(in.removeFirst()); 21 DFS(in,stack,out); 22 } 23 else 24 { //复制栈当前的状况,因为接下来有两种情况 25 Deque inOld=new ArrayDeque<String> (in); //1.栈的元素出栈 26 Stack stackOld=new Stack(); //2.新的元素入栈 27 Deque outOld=new ArrayDeque<String>(out); 28 29 // inOld=new ArrayDeque<String>(in); 30 // Collections. ; 31 // for(Object obj:in.toArray()) 32 // inOld.add(new String((String)obj)); 33 stackOld=(Stack) stack.clone(); 34 // for(Object obj:out.toArray()) 35 // outOld.add(new String((String)obj)); 36 //在当前情况下 in inOld 这些都是相同的内容 所以以下朝两个方向发展 37 out.addLast(stack.pop()); //栈的元素出栈的情况进行下去 38 DFS(in,stack,out); 39 40 stackOld.push(inOld.removeFirst()); //新的元素入栈的情况进行下去 41 DFS(inOld,stackOld,outOld); 42 43 } 44 } 45 }
原文:http://www.cnblogs.com/friends-wf/p/3583919.html