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; }
public void DellTree() { if (r == null) { return; } r = null; }
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); }
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; }
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); } }
// Рекурсивный поиск 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); }
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; } } }
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); } }
public EtSt(ElemTree et, string s) { this.et = et; this.s = s; }
public Tree(InfElem inf) { r = new ElemTree(inf); }
public ElemTree(InfElem d) { this.D = d; this.FL = null; this.FR = null; }