Example #1
0
        public void ShowIPD(ElemTree R, string S, TextBox tb)
        {
            EtSt[]   A  = new EtSt[50]; // А - стек для хранения узлов дерева
            int      st = -1;           // st – начало стека (стек пустой)
            ElemTree p  = R;            // p – текущая ссылка на узел дерева
            string   ps = S;            // ps – текущий сдвиг
            EtSt     es;

            m : while (p != null)
            {
                tb.AppendText(ps + p.D.sokrName + "\r\n"); // вывод узла p //R
                st++;                                      //инкрем. Стека
                es    = new EtSt(p, ps);
                A[st] = es;                                // запись текущего узла
                p     = p.FL;
                if (p != null)
                {
                    ps += "   ";   // сдвиг увеличиваем т.к. идем по ссылке  FL
                }
            }

            if (st == -1)
            {
                return;
            }
            p  = A[st].et;      //извлечение из стека нового узла
            ps = A[st].s;
            st = st - 1;        //декремент стека
            p  = p.FR;
            goto m;
        }
Example #2
0
 public void DellTree()
 {
     if (r == null)
     {
         return;
     }
     r = null;
 }
Example #3
0
        public ElemTree ShowNode(ElemTree R, string Tkey)
        {
            ElemTree elem = FindNode(R, Tkey);

            if (elem == null)
            {
                throw new MyExcept("Узел с таким ключем не найден!");
            }
            MessageBox.Show("Сокращенное имя: " + elem.D.sokrName + ". \nИмя: " + elem.D.name + ". \nКлюч: " + elem.D.kl);
            return(elem);
        }
Example #4
0
        public void EditNode(string kl, InfElem infEl)
        {
            if (infEl.kl != kl)
            {
                throw new MyExcept("Ошибка! Разные ключи!");
            }
            ElemTree elem = FindNode(r, kl);

            if (elem == null)
            {
                throw new MyExcept("Узел с таким ключем не найден!");
            }
            elem.D.sokrName = infEl.sokrName;
            elem.D.name     = infEl.name;
        }
Example #5
0
        private void but_Find_Click(object sender, EventArgs e)
        {
            string find = text_task.Text;

            try {
                ElemTree elem = T.FindNode(T.r, find);
                text_skr.Text = elem.D.sokrName;
                text_inf.Text = elem.D.name;       // выделенного
                text_key.Text = elem.D.kl;
            } catch (MyExcept ex) {
                MessageBox.Show(ex.Message);
            } catch (NullReferenceException) {
                MessageBox.Show("Некорректный ключ или дерево пустое!");
            } catch (Exception ex1) {
                MessageBox.Show(ex1.Message);
            }
        }
Example #6
0
 // Рекурсивный поиск
 public ElemTree FindNode(ElemTree R, string kl)
 {
     if (R != null)
     {
         // R
         if (R.D.kl == kl)
         {
             return(R);
         }
         // A
         ElemTree p = FindNode(R.FL, kl);
         if (p != null)
         {
             return(p);
         }
         // B
         return(p = FindNode(R.FR, kl));
     }
     return(null);
 }
Example #7
0
        public void DellNode(string kl_rod, string kl_pot)    // удалить у родителя потомка
        {
            ElemTree elem = FindNode(r, kl_rod);

            if (elem == null)
            {
                throw new MyExcept("Родительский узел с таким ключем не найден!");
            }
            ElemTree potom = FindNode(elem, kl_pot);

            if (potom == null)
            {
                throw new MyExcept("Потомок с таким ключем не найден!");
            }
            if (elem.FL == null)
            {
                throw new MyExcept("В данного родителя нет потомков");
            }

            if (elem.FL.D.kl == kl_pot)
            {
                elem.FL = elem.FL.FR;
            }
            else
            {
                ElemTree temp = elem.FL;
                while (temp != null && temp.FR?.D?.kl != kl_pot)
                {
                    temp = temp?.FR;
                }
                if (temp?.FR == null)
                {
                    throw new MyExcept("В данного узла нет потомка с таким ключом");
                }
                else
                {
                    temp.FR = temp.FR.FR;
                }
            }
        }
Example #8
0
        public void Add_Node(string Tkey, InfElem Tinf)
        {
            ElemTree elem = FindNode(r, Tkey);

            if (elem == null)
            {
                throw new MyExcept("Узел с таким ключем не найден!");
            }

            if (elem.FL == null)
            {
                elem.FL = new ElemTree(Tinf);
            }
            else
            {
                ElemTree temp = elem.FL;
                while (temp.FR != null)
                {
                    temp = temp.FR;
                }
                temp.FR = new ElemTree(Tinf);
            }
        }
Example #9
0
 public EtSt(ElemTree et, string s)
 {
     this.et = et;
     this.s  = s;
 }
Example #10
0
 public Tree(InfElem inf)
 {
     r = new ElemTree(inf);
 }
Example #11
0
 public ElemTree(InfElem d)
 {
     this.D  = d;
     this.FL = null;
     this.FR = null;
 }