// конструктор public Node(double data, Node left, Node right, Node parent) { 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.data)) return false; if ((t == null) || (k == t.data)) return true; else if (k < t.data) 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.data)) return t; else if (k < t.data) 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.data) Del0(data, ref p.left); else if (data > p.data) 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.data = r.data; q = r; r = r.left; } }
// рекурсивная функция добавления элемента со значением val private void Add(Node p, double val) { if (p.data < val) { if (p.right == null) p.right = new Node(val, null, null, p); else Add(p.right, val); } else { if (p.left == null) p.left = new Node(val, null, null, p); else Add(p.left, val); } }
// "обёртка" для функции Add public void Add(double value) { if (top == null) { top = new Node(value, null, null, null); return; } Add(top, value); }