public void InsertToCreateCompleteBT(T data) { if (Head == null) { Head = new BinaryTreeNodeWithParent <T>(data); BtQueue.Enqueue(Head); } else { BinaryTreeNodeWithParent <T> nodeToAdd = new BinaryTreeNodeWithParent <T>(data); BinaryTreeNodeWithParent <T> nodeFromQueue = BtQueue.Peek(); if (nodeFromQueue.Left == null) { // add the new node to the left if the left node is not present on the nodeFromQueue nodeFromQueue.Left = nodeToAdd; nodeToAdd.Parent = nodeFromQueue; } else if (nodeFromQueue.Right == null) { // add the new node to the right if the right node is not present on the nodeFromQueue nodeFromQueue.Right = nodeToAdd; nodeToAdd.Parent = nodeFromQueue; // Now both the left and right nodes of the nodeFromQueue is full, so we can dequeue it BtQueue.Dequeue(); } else { // we should never hit this condition, as we are dequeueing the Binary Tree node in the condition before throw new Exception("The node with both left and right nodes notqual to null is present in the queue"); } BtQueue.Enqueue(nodeToAdd); } }
public void InsertSkewed(T data) { if (Head == null) { Head = new BinaryTreeNodeWithParent <T>(data); } else { BinaryTreeNodeWithParent <T> currentNode = Head; while (currentNode.Left != null) { currentNode = currentNode.Left; } BinaryTreeNodeWithParent <T> nodeToAdd = new BinaryTreeNodeWithParent <T>(data); currentNode.Left = nodeToAdd; nodeToAdd.Parent = currentNode; } }
public BinaryTreeNodeWithParent <T> Search(T data) { Queue <BinaryTreeNodeWithParent <T> > queueForTreeNodes = new Queue <BinaryTreeNodeWithParent <T> >(); queueForTreeNodes.Enqueue(Head); while (queueForTreeNodes.Count != 0) { BinaryTreeNodeWithParent <T> currentNode = queueForTreeNodes.Dequeue(); if (currentNode.Data.CompareTo(data) == 0) { // Found the node return(currentNode); } if (currentNode.Left != null) { queueForTreeNodes.Enqueue(currentNode.Left); } if (currentNode.Right != null) { queueForTreeNodes.Enqueue(currentNode.Right); } } return(null); }