На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Удаление листьев из дерева , Дописать код, который удаляет ветвь с листьями
    Доброго времени суток,

    Ситуация такая: Дан код дерева, нужно закончить его редактировать, т.е. закончить удаление листка.
    Есть полное дерево, у которого начало (верхушка) с 4, всё то, что меньше 4 - идёт вверх, всё,что больше 4 - идёт вниз и так далее.
    2-4: ветка номер 2, её "отец" номер 4, у неё есть дети - 1 и 3. Нужно, чтобы удалив ветку номер 2, удалилсь бы и её дети.
    Как можно реализовать удаление?

    List.java:

    ExpandedWrap disabled
      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:

    ExpandedWrap disabled
      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:

    ExpandedWrap disabled
      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);
          }
          
      }
      ExpandedWrap disabled
        procedure Remove(Node)
          if Node.Left != null
              Remove(Node.Left);
          if Node.Right != null
              Remove(Node.Left);
          if Node.Parent != null
              if Node = Node.Parent.Left
                 Node.Parent.Left = null
              if Node = Node.Parent.Right
                 Node.Parent.Right = null
          Очистить данные Node, если нужно
      Сообщение отредактировано: MBo -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0204 ]   [ 15 queries used ]   [ Generated: 24.04.24, 03:22 GMT ]