@java puente azul de la taza del Grupo B ejercicios de entrenamiento de algoritmo de artículos (241) 27 pregunta: FBI y árbol binario

Palabras clave: binario recorrido de árbol, la recursividad, ciclismo

Descripción del problema

Podemos poner una cadena de "0" y "1" que consiste en tres categorías: todos "0" string llamado B, toda la cadena Me secuencia llamada "1", contiene tanto "0" y contiene "1" F se llama cadena de cadena.
  árbol FBI es un árbol binario, también incluye un tipo de nodo linfáticos F, B y el nodo I nodo tres. A 2N longitud desde el "01" string S puede construir un árbol FBI T, construido de forma recursiva como sigue:
  1) T del nodo raíz R, del mismo tipo y del tipo de cadena de S;.
  2) si la cadena de S 1 es mayor que la longitud de la cadena s raya en medio se divide en sub-cadenas izquierdo y derecho de la misma longitud S1 y S2; T1 dejó por la estructura subárbol izquierdo R es subcadena S1, por la subcadena derecho subárbol derecho de la configuración R S2 T2.
  Ahora dadas una longitud de 2 N "01" serie, construyen el método de construcción del árbol FBI se ha descrito anteriormente una, y la emite postorden traversal secuencia.
El formato de entrada
  de la primera línea es un número entero N (0 <= N <= 10), una segunda línea de longitud 2N es el "01" serie.
Los formatos de salida
  incluyendo la línea, que sólo contiene una cadena de caracteres, es decir, la posterior secuencia de recorrido de árbol del FBI.
Muestra de entrada
. 3
10,001,011
Salida de muestra
IBFBBBFIBFIIIFF
tamaño de los datos y las convenciones
  para los datos del 40%, N <= 2;
  para todos los datos, N <= 10.
  Nota:
  [1] binario: el árbol binario es un conjunto finito de nodos, el conjunto es un conjunto vacío, o, o consiste en una raíz y composición binaria dos disjuntos. Estos dos árboles binarios disjuntos se llaman la raíz del subárbol izquierdo y subárbol derecho.
  [2] Después de preorden: recorridos orden posterior es un método para recorrido en profundidad del árbol binario, es definición recursiva: preorden ha subárbol izquierdo, luego el derecho subárbol orden posterior recorrido del último acceso a la raíz.

sección de código:

Esta pregunta es sólo el comienzo, no entiendo cómo, más tarde en la Internet para encontrar una respuesta, ja, puede decirse que es una prostituta blanca, que debería estar en condiciones de añadir un poco de mi que entender para ayudar a ver si hay algo malo Sí, ja, ja, gracias corríjanme ah ! ! ! ! ! ~~


public class ALGO027 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		java.util.Scanner in=new java.util.Scanner(System.in);
		int n=in.nextInt();
		String s=in.next();
		post_order(0,s.length()-1,s);
		in.close();
	}
	//后序遍历--->递归思想
	private static void post_order(int l,int r,String s){
		int mid=(l+r)/2;//控制分割的位置:在字符串的正中间分割开
		//先全部分割完,然后把全部结点标记之后再输出。
		if(l!=r){//分割:知道r=l=0才停止分割
			post_order(l,mid,s);//左子树
			post_order(mid+1,r,s);//右子树
		}
		//设置标记判断字符
		int flag1=0,flag2=0;//定义判断的变量
		for(int i=l;i<=r;i++){//标记判断字符(变量)并且根据01字符串(这里的字符串是已经不可再分割的字符串)给控制输出的两个变量flag1、flag2赋上对应的值
			if(s.charAt(i)=='0') flag1=1;
			if(s.charAt(i)=='1') flag2=1;
		}
		//根据判断字符变量来输出对应的字母:B、I、F
		if(flag1==1&&flag2==0) System.out.print("B");//只有0
		if(flag1==0&&flag2==1) System.out.print("I");//只有1
		if(flag1==1&&flag2==1) System.out.print("F");//既有0又有1
	}
}

Publicado 29 artículos originales · ganado elogios 1 · vistas 1089

Supongo que te gusta

Origin blog.csdn.net/DAurora/article/details/105169177
Recomendado
Clasificación