Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2016, 09:07   #1
Oxidous
Пользователь
 
Регистрация: 31.08.2007
Сообщений: 28
По умолчанию Удаление листьев из дерева

Всем доброго времени суток,

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

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

Честно говоря, не понимаю задания, что конкретно нужно сделать? Я в 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 вне форума Ответить с цитированием
Старый 16.05.2016, 09:22   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Я в Java не силён, а потому несовсем представляю, как можно реализовать удаление.
Так же как и в других языках.

Изучать бинарные деревья, binary search tree.

Код унылый какой-то, стремное смешивание русских и английских имен. Особенно например findList (обычно слово List используют для списков, а не листьев). Писали б хотя бы naitiList тогда. Ну а лучше естественно на английском (Leaf, findLeaf, parent, add, remove, ...) как все нормальные люди.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 16.05.2016 в 09:29.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление узла бинарного дерева DaoKemZem Общие вопросы C/C++ 1 07.11.2015 09:56
Удаление узла из дерева rafffkaaa Паскаль, Turbo Pascal, PascalABC.NET 0 19.05.2013 14:41
C++ Удаление элемента из дерева Manitikyl C++ Builder 0 09.05.2012 13:51
удаление узлов из дерева ArniLand Общие вопросы по Java, Java SE, Kotlin 0 22.09.2010 21:36
размеры листьев koshmarius Помощь студентам 4 12.08.2009 15:44