java poj 2255
其实,虽然说之前看过数据结构,但是我对它那种编程实现方式理解得不够深刻,只能说思想理解了,但是具体的实现并不深刻,因为我没有学C++。今天,这次算是对数据结构的一次练习了。思想很快确定下来了,就是跟《数据结构》中说的一样,主要是用递归。但是对递归情况需要判定,如根只有左子树或者右子树怎么办,剩下最后一个字母的时候的判断。需要细心细心。
我的卡壳的地方是因为 substring(int beginIndex, int endIndex) 这个函数,后面的endIndex:到指定的 endIndex-1处结束。我以为是恰到endindex,所以都减一了,悲剧。不多说,上代码~
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import java.io.BufferedInputStream; import java.util.Scanner; public class Main { public static void main(String args[]){ Scanner cin = new Scanner(new BufferedInputStream(System.in)); String pre; String in; while(cin.hasNext()){ pre=cin.next(); in=cin.next(); String s= getPostOrder(pre, in); System.out.println(s); } } public static String getPostOrder(String pre,String in){ if(pre.length()==1&&in.length()==1) return in; char head = pre.charAt(0); int n = in.indexOf(head); if(n==0){ String in2= in.substring(1,in.length()); String pre2 = pre.substring(1, pre.length()); return getPostOrder(pre2, in2)+head; } if(n==(in.length()-1)){ String in1 = in.substring(0, n); String pre1 = pre.substring(1, pre.length()); return getPostOrder(pre1, in1)+head; } String in1 = in.substring(0, n); String in2= in.substring(n+1, in.length()); String pre1 = pre.substring(1, in1.length()+1); String pre2 = pre.substring(in1.length()+1, pre.length()); pre=getPostOrder(pre1, in1); in = getPostOrder(pre2, in2); String s = pre+in+head; return s; } }