Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java] lunghezza nodo sinistro di un albero

    Ciao ho costruito un labero binario:

    codice:
    class SimpleNode {
    private SimpleNode left;
    private SimpleNode right;
    private String content;
    SimpleNode(String content){
        if(content==null){
            throw new RuntimeException("argomento nullo");
        }
        this.content=content;
    }
    public String getContent(){
        return content;
    }
    public boolean setLeftNode(SimpleNode n){
        if(n.left==null&&n!=null){
            left=n;
            return true;
        }else
        return false;
        
    }
    
    
    public SimpleNode getLeft(){
        return left;
    }
    public boolean setRightNode(SimpleNode n){
    if(n.right==null&&n!=null){
            right=n;
            return true;
        }else
        return false;
    }
    public SimpleNode getRight(){
        return right;
    }
    
    public void add(SimpleNode n){
        if(left==null){
            setLeftNode(n);
         }else if(right==null){
            setRightNode(n);
    }
    }
    //calocolo lunghezza nodo sinistro
    private static int lengthLeft(SimpleNode node) { 
      if (node == null){ return(0); 
      }else
        
        return lengthLeft(node.getLeft()) + 1; 
      } 
    
    
    public String toString(){
        String s="";
        return s+="nodo: "+content+"\nleft: "+getLeft()+"\nright: "+getRight();
    }
    }
    Il mio problema è il metodo lengthLeft(SimpleNode)...non mi calcola la lunghezza del nodo sinistro...infatti se eseguo da main:
    codice:
    public static void main(String[] args){
        SimpleNode n=new SimpleNode("70");
        boolean b=n.setLeftNode(new CleverNode("40"));
        boolean bz=n.setLeftNode(new CleverNode("50"));
        boolean bx=n.setLeftNode(new CleverNode("80"));
        boolean bc=n.setLeftNode(new CleverNode("90"));
        System.out.println(lengthLeft(n));
        }    
    }
    Il terminale stampa 2...e non 4...come posso calcolare la lunghezza del nodo sinistro del mio albero?
    Ultima modifica di el92; 12-06-2015 a 11:16

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    codice:
        SimpleNode n=new SimpleNode("70");
        boolean b=n.setLeftNode(new CleverNode("40"));
        boolean bz=n.setLeftNode(new CleverNode("50"));
        boolean bx=n.setLeftNode(new CleverNode("80"));
        boolean bc=n.setLeftNode(new CleverNode("90"));
    Qui hai solo un nodo "radice" (quello con 70) con un nodo left (quello con 90). Gli altri setLeftNode sono superflui ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    Ciao ma perchè mi considera solo l'ultimo setLeftNode?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    Ciao ma perchè mi considera solo l'ultimo setLeftNode?
    Setti 4 volte il left di n. Non crei 4 livelli ... solo 2.
    Come se facessi 4 volte label.setText(" ... "), chiaramente vedi l'effetto solo dell'ultimo setText!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.