using System;
using System.Collections.Generic;
using System.Text;
namespace BinaryTree
{
class Program
{
static void Main(string[] args)
{
BTree bt = new BTree();
Node parent= null, current = null;
int i = 1;
while(i>0)
{
Console.WriteLine("Input an integer");
i = int.Parse(Console.ReadLine());
bt.find(i, ref parent, ref current);
if (current != null) Console.WriteLine("{0}Already exist!", i);
else
{
bt.addNew(i, parent, current);
Console.WriteLine("{0} inserted!", i);
}
};
return;
}
}
class Node
{
public int ivalue;
public Node lchild;
public Node rchild;
public Node(int i, Node l, Node r)
{
ivalue = i;
lchild = l;
rchild = r;
}
}
class BTree
{
public Node ROOT;
public BTree()
{
ROOT = null;
}
public bool contain(int element)
{
Node parent = null, currentNode = null;
find(element, ref parent, ref currentNode);
if(currentNode == null) return false;
return true;
}
public bool add(int element)
{
Node tmp, parent = null, currentNode = null;
find(element, ref parent, ref currentNode);
if(currentNode != null)
{
return false; // already there
}
else
{
tmp = new Node(element, null, null);
if(parent == null) // empty tree
ROOT = tmp;
else
if(element<parent.ivalue)
parent.lchild =tmp;
else
parent.rchild = tmp;
}
return true;
}
// must make sure that the value is not in the tree
public void addNew(int element, Node parent, Node currentNode)
{
//if(currentNode != null) return false;
Node tmp;
// currentNode should be null
tmp = new Node(element, null, null);
if (parent == null) // empty tree
ROOT = tmp;
else
if (element < parent.ivalue)
parent.lchild = tmp;
else
parent.rchild = tmp;
}
public void find(int element, ref Node parent, ref Node currentNode)
{
currentNode = ROOT;
parent = null;
while ((currentNode != null) && (currentNode.ivalue != element))
{
parent = currentNode;
if (element < currentNode.ivalue) // left
currentNode = currentNode.lchild;
else // right
currentNode = currentNode.rchild;
}
}
}
}