public BinNode <T> RemoveAt(BinNode <T> n) { BinNode <T> ret = null; if (n.HasRC() && n.HasLC()) { var succ = n.Succ; ret = succ.Parent; var temp = succ.data; succ.data = n.data; n.data = temp; var succParent = succ.Parent; if (succParent == n) { succParent.RC = succ.RC; } else { succParent.LC = succ.RC; } if (succ.RC != null) { succ.RC.Parent = succParent; } } else { ret = n.Parent; var child = n.HasLC() ? n.LC : n.RC; if (child != null) { child.Parent = n.Parent; } if (n.IsRoot()) { this.Root = child; } else if (n.IsLC()) { n.Parent.LC = child; } else { n.Parent.RC = child; } } return(ret); }
public BinNode <T> SearchIn(T e, BinNode <T> node) { while (node != null && comparer != null) { int comRet = comparer.Compare(e, node.data); if (comRet == 0) { return(node); } else if (comRet < 0 && node.HasLC()) { node = node.LC; } else if (comRet > 0 && node.HasRC()) { node = node.RC; } else { return(node); } } return(null); }