public bool find(T value) { BinFunc nul = (ref Node <T> node, T val) => false; BinFunc equal = (ref Node <T> node, T val) => true; return(binary_traversal(ref this.node, value, nul, equal)); }
public bool insert(T value) { BinFunc nul = delegate(ref Node <T> node, T val) { node = new Node <T>(val); return(true); }; BinFunc equal = (ref Node <T> node, T val) => false; return(binary_traversal(ref this.node, value, nul, equal)); }
public bool delete(T value) { BinFunc nul = (ref Node <T> node, T val) => false; BinFunc equal = delegate(ref Node <T> node, T val) { Node <T> n; Node <T> supp; if (node.childs[0] != null) { if (node.childs[0].childs[1] == null) { n = node.childs[0]; n.childs = node.childs; n.childs[0] = null; node = n; } else { supp = node; n = node.childs[0]; while (n.childs[1] != null) { supp = n; n = n.childs[1]; } supp.childs[1] = n.childs[0]; n.childs = node.childs; node = n; } } else { node = node.childs[1]; } return(true); }; return(binary_traversal(ref this.node, value, nul, equal)); }
private bool binary_traversal(ref Node <T> node, T val, BinFunc null_case, BinFunc equal_case) { if (node == null) { return(null_case(ref node, val)); } else { if (CompFunction(node.value, val) == 0) { return(equal_case(ref node, val)); } else if (CompFunction(node.value, val) > 0) { return(binary_traversal(ref node.childs[0], val, null_case, equal_case)); } else { return(binary_traversal(ref node.childs[1], val, null_case, equal_case));; } } }