Pregunta

tratando de envolver mi cabeza alrededor de cómo corregir mi código.Tengo la idea, pero me atasco durante la implementación.

Cuando paso a través del código a continuación, puedo reconstruir parte del BST de un recorrido previo a pedido.Pero en algún momento, tendré una llamada de función como:

recon(preOrd,2,2) 

que resulta en una hoja que no está siendo asignada.Sago todavía sé cómo corregir esto.

He visto otros hilos sobre este tema, pero quiero planchar mi problema para que realmente pueda aprender este concepto de reconstruir el BST.

public static Node recon(int[] preOrd,int start,int end){

if (start==end){
        return null;
    }
    Node root = new Node (preOrd[start]);   
    int div=start;
    for (i=start+1;i<=end && preOrd[i]<preOrd[start];i++){ 
        div=i;
    }
Node left= reconstruct(preOrd,start+1,div);
Node right= reconstruct(preOrd,div+1,end);

root.setLeft= left;
root.setRight=right;
    return root;
}

¿Fue útil?

Solución

Resulta que esto es bastante sencillo.Solo necesitaba corregir mi pensamiento en la actualización de los nodos de las hojas.

public static Node recon(int[] preOrd,int start,int end){
    Node root = new Node (preOrd[start]);//declare the new node      
    if (start>end){ //this is illegal, so return null 
            return null;
        }
    if (start==end){
            return root;
        }  
        int div=start;
        for (int i=start+1;i<=end preOrd[i]<preOrd[start];i++){ 
            div=i;
        }
    Node left= reconstruct(preOrd,start+1,div);
    Node right= reconstruct(preOrd,div+1,end);

    root.setLeft= left;
    root.setRight=right;
    return root;
    }

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top