用C#写二叉数

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;
            }
        }                
    }
}

你可能感兴趣的:(C#)