public void InsertNodeTo(BinarySearchTreeNode <T> node, BinarySearchTreeNode <T> newNode) { if (node.CompareTo(newNode) > 0) { // new node is lesser if (node.HasLeft) { this.InsertNodeTo(node.Left, newNode); return; } else { node.Left = newNode; node.Left.Parent = node; return; } } else { // new node is greater if (node.HasRight) { this.InsertNodeTo(node.Right, newNode); return; } else { node.Right = newNode; node.Right.Parent = node; return; } } }
public int Level(BinarySearchTreeNode <T> searchNode) { if (searchNode == null) { return(-1); } int level = 1; Queue <BinarySearchTreeNode <T> > q = new Queue <BinarySearchTreeNode <T> >(); q.Enqueue(Root); q.Enqueue(null); while (q.Count > 0) { BinarySearchTreeNode <T> current = q.Dequeue(); if (current == null) { try { if (q.Peek() != null) { q.Enqueue(null); } ++level; } catch (Exception) {} } else { if (searchNode.CompareTo(current) == 0) { break; } if (current.HasLeft) { q.Enqueue(current.Left); } if (current.HasRight) { q.Enqueue(current.Right); } } } return(level); }