java poj 2255

       其实,虽然说之前看过数据结构,但是我对它那种编程实现方式理解得不够深刻,只能说思想理解了,但是具体的实现并不深刻,因为我没有学C++。今天,这次算是对数据结构的一次练习了。思想很快确定下来了,就是跟《数据结构》中说的一样,主要是用递归。但是对递归情况需要判定,如根只有左子树或者右子树怎么办,剩下最后一个字母的时候的判断。需要细心细心。

      我的卡壳的地方是因为 substring(int beginIndex, int endIndex) 这个函数,后面的endIndex:到指定的 endIndex-1处结束。我以为是恰到endindex,所以都减一了,悲剧。不多说,上代码~

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;
        
    }

}
View Code
原文地址:https://www.cnblogs.com/sasaxu/p/3347888.html