Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Удалить листя из дерева


Автор: Oxidous 16.5.2016, 09:16
Всем доброго времени суток,

Ситуация такая: Дано вот такое несовсем понятное задание, но оно описано именно так, как я и выкладываю.

Дан код дерева, нужно закончить его редактировать, т.е. закончить удаление листка (только того значения, оставляя те листья, которые были внутри того листка).

Честно говоря, не понимаю задания, что конкретно нужно сделать? Я в Java не силён, а потому несовсем представляю, как можно реализовать удаление.

List.java:

Код

package derevo;
 
public class List {
 
    int znacenije;
    List left;
    List right;
    List roditel;
 
    public List(int l, List t) {
        znacenije = l;
        roditel = t;
    }
 
    public void dobavitList(int sk, List t) {
        if (sk > znacenije) {
            if (right != null) {
                right.dobavitList(sk, this.right);
            } else {
                right = new List(sk, t);
            }
        } else if (sk < znacenije) {
            if (left != null) {
                left.dobavitList(sk, this.left);
            } else {
                left = new List(sk, t);
            }
        }
    }
 
    public void printList(String tabas) {
        if (left != null) {
            left.printList(tabas + "\t");
        }
        System.out.println(tabas + " " + this.znacenije+" - "+((roditel!=null)?roditel.znacenije:0));
        if (right != null) {
            right.printList(tabas + "\t");
        }
    }
 
    public List find(int sk) {
        if (this.znacenije == sk) {
            return this;
        } else {
            if (sk > this.znacenije && right != null) {
                return right.find(sk);
            } else if (sk < this.znacenije && left != null) {
                return left.find(sk);
            }
        }
        return null;
    }
    
    @Override
    public String toString() {
        return "List{" + "znacenije=" + znacenije+" "+roditel.znacenije + '}';
    }
    
}


Derevce.java:

Код

package derevo;
 
public class Derevce {
 
    List verhushka;
 
    public void dobavitList(int sk) {
        if (verhushka != null) {
            verhushka.dobavitList(sk, verhushka);
        } else {
            verhushka = new List(sk, null);
        }
    }
 
    public void udalitList(int sk) {
        List sl = findList(sk);
        if (sl.right == null && sl.right == null) {
            if (sk > sl.roditel.znacenije) {
                sl.roditel.right = null;
            } else if (sk < sl.roditel.znacenije) {
                sl.roditel.left = null;
            }    
        }
        /*Здесь ещё нужно добавить код, который бы удалял и те листья, у которых есть подлистья (т.е. правую, левую либо обе ветки) */
    }
 
    public List findList(int sk) {
        if (verhushka != null) {
            return verhushka.find(sk);
        }
        return null;
    }
 
    public void pechatat() {
        if (verhushka != null) {
            verhushka.printList("");
        } else {
            System.out.println("Derevo pustoje");
        }
    }
}


PrimerDereva.java:

Код

package derevo;
 
 
public class PrimerDereva {
 
    public static void main(String[] args) {
        Derevce m = new Derevce();
        //m.spausdinti();
        m.dobavitList(4);
        m.dobavitList(2);
        m.dobavitList(3);
        m.dobavitList(1);
        m.dobavitList(6);
        m.dobavitList(9);
        m.dobavitList(19);
        m.pechatat();
        m.udalitList(19);
        m.pechatat();
        m.udalitList(2);
        m.pechatat();
        List a = m.findList(23);
        System.out.println(a);
    }
    
}

Автор: Oxidous 17.5.2016, 13:20
Попробую иначе, как сам понимаю
Есть полное дерево, у которого начало (верхушка) с 4, всё то, что меньше 4 - идёт вверх, всё,что больше 4 - идёт вниз и так далее.
2-4: ветка номер 2, её "отец" номер 4, у неё есть дети - 1 и 3. Нужно, чтобы удалив ветку номер 2, удалилсь бы и её дети.

Автор: rodomod 19.5.2016, 15:48
Выводим rodomod.txt в консоль ArrayList
Код

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
public class ArrList {

    public static void main(String[] args) {

        FileReader myFile = null;
        BufferedReader buff = null;
        String line = new String();
        ArrayList<Object> array = new ArrayList<>();
        
        try {
        myFile=new FileReader("E:\\rodomod.txt");
        buff = new BufferedReader(myFile);
        
        while ((line = buff.readLine()) != null) {

        System.out.println(line);

        char[] m  =line.toCharArray();
        
        for (int i = 0; i < m.length; i++) {
            array.add(m[i]);            
        }
     System.out.println();


        
        } // конец цикла while
        
        System.out.println(array);
        
        
        }catch (IOException e){
        e.printStackTrace();
        } finally {
        try{
        buff.close();
        myFile.close();
        }catch(IOException e1){
        e1.printStackTrace();
        }
        }

        } // конец метода main
        
}


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Udalit-listya-iz-dereva-id5739661cae2015e6138b4567#findElement_E7045_573db639ae2015dd730d6da5_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)