// "обёртка" для функции Add public void Add(double value, string word) { if (top == null) { top = new Node(value, word, null, null, null); return; } Add(top, value, word); }
// рекурсивная функция добавления элемента со значением val private void Add(Node p, double val, string word) { if (p.key < val) { if (p.right == null) p.right = new Node(val, word, null, null, p); else Add(p.right, val, word); } else { if (p.left == null) p.left = new Node(val, word, null, null, p); else Add(p.left, val, word); } }
// конструктор public Node(double key, string data, Node left, Node right, Node parent) { this.key = key; this.data = data; this.left = left; this.right = right; this.parent = parent; }
// рекурсивная функция поиска элемента по значению (возвращает true/false) private bool SearchBool(ref Node t, double k) { if ((top == null) || (k != t.key)) return false; if ((t == null) || (k == t.key)) return true; else if (k < t.key) return SearchBool(ref t.left, k); else return SearchBool(ref t.right, k); }
// рекурсивная функция поиска элемента по значению (возвращает элемент) private Node Search(ref Node t, double k) { if ((t == null) || (k == t.key)) return t; else if (k < t.key) return Search(ref t.left, k); else return Search(ref t.right, k); }
private void Del0(int data, ref Node p) { if (p != null) if (data < p.key) Del0(data, ref p.left); else if (data > p.key) Del0(data, ref p.right); else { q = p; if (q.right == null) p = q.left; else if (q.left == null) p = q.right; else Del(ref q.left); } }
private void Del(ref Node r) { if (r.right != null) Del(ref r.right); else { q.key = r.key; q = r; r = r.left; } }