private int find_key <T>(T key, List <Node> path) { INodeHelper <T> nodeHelper = (INodeHelper <T>)hlp; int num = 0; Node node = null; Node node2 = root; path?.Add(root); while (node2 != null) { num = nodeHelper.Compare(key, node2); if (num == 0) { return(num); } if (num < 0) { node = node2.right; node2 = node2.left; } else { node = node2.left; node2 = node2.right; } if (path != null) { path.Add(node); path.Add(node2); } } return(num); }
public Node Lookup <T>(T key) { INodeHelper <T> hlp = (INodeHelper <T>) this.hlp; Node current = root; while (current != null) { int c = hlp.Compare(key, current); if (c == 0) { break; } current = c < 0 ? current.left : current.right; } return(current); }
public Node Lookup <T>(T key) { INodeHelper <T> nodeHelper = (INodeHelper <T>)hlp; Node node; int num; for (node = root; node != null; node = ((num >= 0) ? node.right : node.left)) { num = nodeHelper.Compare(key, node); if (num == 0) { break; } } return(node); }
// Get an enumerator that starts at 'key' or the next higher element in the tree public NodeEnumerator GetSuffixEnumerator <T>(T key) { var pennants = new Stack <Node>(); INodeHelper <T> hlp = (INodeHelper <T>) this.hlp; Node current = root; while (current != null) { int c = hlp.Compare(key, current); if (c <= 0) { pennants.Push(current); } if (c == 0) { break; } current = c < 0 ? current.left : current.right; } return(new NodeEnumerator(this, pennants)); }
// Pre-condition: root != null int find_key <T>(T key, List <Node> path) { INodeHelper <T> hlp = (INodeHelper <T>) this.hlp; int c = 0; Node sibling = null; Node current = root; if (path != null) { path.Add(root); } while (current != null) { c = hlp.Compare(key, current); if (c == 0) { return(c); } if (c < 0) { sibling = current.right; current = current.left; } else { sibling = current.left; current = current.right; } if (path != null) { path.Add(sibling); path.Add(current); } } return(c); }
public void Bound <T>(T key, ref Node lower, ref Node upper) { INodeHelper <T> hlp = (INodeHelper <T>) this.hlp; Node current = root; while (current != null) { int c = hlp.Compare(key, current); if (c <= 0) { upper = current; } if (c >= 0) { lower = current; } if (c == 0) { break; } current = c < 0 ? current.left : current.right; } }