C#实现二叉树查找删除插入

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
class Node
{
private object _data;
private Node left;
private Node right;
private Node _head;
public int data;
private string str;
public object Date
{
get { return _data; }
set { _data = value; }
}
public Node Left
{
get { return left; }
set { left = value; }
}
public Node Right
{
get { return right; }
set { right = value; }
}
public Node(object date)
{
_data = date;
}
public override string ToString()
{
return _data.ToString();
}
public Node Head
{
get { return _head; }
}
public Node(string strs)
{
str = strs;
_head = new Node(str[0]);
Add(_head,0);

}
public void Add(Node prer, int index)
{
int leftIndex = 2 * index + 1;
if(leftIndex<str.Length)
{
if(str[leftIndex]!='#')
{
prer.left = new Node(str[leftIndex]);
Add(prer.left,leftIndex);
}
}
int rightIndex = 2 * index + 2;
if (rightIndex < str.Length)
{
if(str[leftIndex]!='#')
{
prer.right = new Node(str[rightIndex]);
Add(prer.right, rightIndex);
}
}

    }
    public void XianOrder(Node node)
    {
        if (node != null)
        {
            Console.WriteLine(node.ToString());
            XianOrder(node.left);
            XianOrder(node.right);
        }
    }
    public void ZhongOrder(Node node)
    {
        if (node != null)
        {
            ZhongOrder(node.left);
            Console.WriteLine(node.ToString());
            ZhongOrder(node.right);
        }
    }
    public void HouOrder(Node node)
    {
        if (node != null)
        {
            HouOrder(node.left);
            HouOrder(node.right);
            Console.WriteLine(node.ToString());
        }
    }
    public Node Search(int i)
    {
        Node curren = _head;
        while (true)
        {
            if (i < curren.data)
            {
                if (curren.left == null)
                {
                    break;
                    curren = curren.left;
                }
            }
            else if (i > curren.data)
            {
                if (curren.right == null)
                {
                    break;
                    curren = curren.right;
                }
            }
            else
            {

                return curren;
            }
        }
        if (curren.data != i)
        {

            return null;
        }

        return curren;
    }
    static void Main(string[] args)
    {
        Node node = new Node("1234567####8");
        node.XianOrder(node._head);
        Console.WriteLine();
        node.ZhongOrder(node.Head);
        Console.WriteLine();
        node.HouOrder(node.Head);
        Console.WriteLine();
        Node n = node.Search(3);
        Console.WriteLine("所查的节点是:"+n._data);
        Console.Read();
    }

            怎么在它之上添加查询子节点等方法,

http://www.cnblogs.com/CareySon/archive/2012/04/19/implebinarytreewithcsharp.html

http://blog.sina.com.cn/s/blog_937cbcc10101dmqm.html
http://blog.sina.com.cn/s/blog_4fcd9f220100mxd3.html

网上搜索,还是挺多的。