天天看點

判斷兩序列是否為同一二叉搜尋樹序列

描述:  判斷兩序列是否為同一二叉搜尋樹序列
題目類别:  樹 
難度:  中級 
運作時間限制: 10Sec
記憶體限制: 128MByte
階段:  入職前練習 
輸入:

開始一個數n,(1<=n<=20) 表示有n個需要判斷,n= 0 的時候輸入結束。

接下去一行是一個序列,序列長度小于10,包含(0~9)的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。

接下去的n行有n個序列,每個序列格式跟第一個序列一樣,請判斷這兩個序列是否能組成同一顆二叉搜尋樹。

輸出: 如果序列相同則輸出YES,否則輸出NO
樣例輸入:
2
567432
543267
576342
0
                         
樣例輸出:
YES
NO      

也不知道這種思路對不對,反正平台上是過了。看到網上大家的普遍做法是比較他的前序序列,如果一緻就是相同

我自己的解決思路是,将要比較的字元串和第一個字元串分隔。比第一個數字大的組成一個子串,比第一個數字小的組成一個子串。組成子串的時候和原串順序相同。

比較子串。如果都相同,那就是同一個樹

import java.util.*;
public class Main {
	
	public static void main(String args[]){
		
		isSameTree();
	}

	
	public static void isSameTree(){
		
		Scanner s= new Scanner(System.in);
		//判斷個數
		int num = Integer.valueOf(s.nextLine());
		//第一個序列
		String firstTreeStr = s.nextLine();
		//得到第一個序列的兩個子串,第一個子串全部小于串中第一個數字,第二個子串全部大于第一個數字,順序和原串相同
		
		String subFirstTreeStrSmall = devideTree( firstTreeStr,1);
		String subFirstTreeStrBig = devideTree( firstTreeStr,2);
		
//		System.out.println(subFirstTreeStrSmall);
//		System.out.println(subFirstTreeStrBig);
		String treeStr = s.nextLine();
		String subTreeStrSmall = devideTree( treeStr,1);
		String subTreeStrBig = devideTree( treeStr,2);
		
		ArrayList res = new ArrayList();
		
		while(!treeStr.equals("0")){
			
			if(subTreeStrSmall.equals(subFirstTreeStrSmall)&&subTreeStrBig.equals(subFirstTreeStrBig))
				 res.add("YES");
				 //System.out.println("YES");
			 else res.add("NO");//System.out.println("NO");
			
			
			 treeStr = s.nextLine();
			 subTreeStrSmall = devideTree( treeStr,1);
			 subTreeStrBig = devideTree( treeStr,2);
		}
		
		for(int i=0;i<num;i++){
			
			System.out.println(res.get(i));
			
			
		}
		
	}
	
	//分隔串函數,int i 代表,子串大于或小于第一個數字i小于,2大于
	public static String  devideTree(String treeStr,int i){
		
		String subStr = "";
		int length = treeStr.length();
		
		int firstStr = Integer.valueOf(treeStr.charAt(0)+"");
		if(i==1){
			
			for(int x = 1;x<length;x++){
				
				int nextStr = Integer.valueOf(treeStr.charAt(x)+"");
				if(nextStr<firstStr)
					subStr+=nextStr;
				
				
			}			
		}else if(i==2){
			for(int x = 1;x<length;x++){
				
				int nextStr = Integer.valueOf(treeStr.charAt(x)+"");
				if(nextStr>firstStr)
					subStr+=nextStr;
				
				
			}
		}
		
		
		
		return subStr;
		
		
		
		
	}
}