private void PreOrder(NodeTreeMy<int> root)
 {
     if (root != null)
     {
         root.DisplayNode();
         PreOrder(root.Left);
         PreOrder(root.Right);
     }
 }
 private void InOrder(NodeTreeMy<int> root)
 {
     if (root!=null)
     {
         InOrder(root.Left);
         root.DisplayNode();
         InOrder(root.Right);
     }
 }
 public int FindMin()
 {
     if (Root==null)
     {
         return default(int);
     }
     NodeTreeMy<int> currentNode = Root;
     while (currentNode.Left != null)
     {
         currentNode = currentNode.Left;
     }
     return currentNode.Data;
 }
        public NodeTreeMy<int> Find(int key)
        {
            NodeTreeMy<int> currentNode = Root;
            while (currentNode!=null)
            {
                if (key==currentNode.Data)
                {
                    break;
                }
                else if (key<currentNode.Data)
                {
                    currentNode = currentNode.Left;
                }
                else
                {
                    currentNode = currentNode.Right;
                }
            }

            return currentNode;
        }
 public void Insert(int item)
 {
     NodeTreeMy<int> newNode = new NodeTreeMy<int>(item);
     if (Root==null)
     {
         Root = newNode;
     }
     else
     {
         NodeTreeMy<int> currentNode = Root;
         while (true)
         {
             if (item < currentNode.Data)
             {
                 if (currentNode.Left == null)
                 {
                     currentNode.Left = newNode;
                     break;
                 }
                 else
                 {
                     currentNode = currentNode.Left;
                 }
             }
             else
             {
                 if (currentNode.Right==null)
                 {
                     currentNode.Right = newNode;
                     break;
                 }
                 else
                 {
                     currentNode = currentNode.Right;
                 }
             }
         }
     }
 }
Exemple #6
0
 public NodeTreeMy(T item)
 {
     Data  = item;
     Left  = null;
     Right = null;
 }
Exemple #7
0
 public NodeTreeMy()
 {
     Data  = default(T);
     Left  = null;
     Right = null;
 }
        public bool Delete(int key)
        {
            if (Root==null)
            {
                return false;
            }
            NodeTreeMy<int> parentNode = Root;
            NodeTreeMy<int> currentNode = Root;
            bool IsLeftNode = true;
            while (currentNode!=null)
            {
                if (key == currentNode.Data)
                {
                    if (currentNode.Left==null&&currentNode.Right==null)
                    {
                        if (currentNode==Root)
                        {
                            Root = null;
                        }
                        if (IsLeftNode)
                        {
                            parentNode.Left = null;
                        }
                        else
                        {
                            parentNode.Right = null;
                        }
                    }
                    else if (currentNode.Left == null)
                    {
                        if (currentNode==Root)
                        {
                            Root = currentNode.Right;
                        }
                        else
                        {
                            if (IsLeftNode)
                            {
                                parentNode.Left = currentNode.Right;
                            }
                            else
                            {
                                parentNode.Right = currentNode.Right;
                            }
                        }

                        currentNode.Right = null;
                    }
                    else if (currentNode.Right==null)
                    {
                        if (currentNode == Root)
                        {
                            Root = currentNode.Left;
                        }
                        if (IsLeftNode)
                        {
                            parentNode.Left = currentNode.Left;
                        }
                        else
                        {
                            parentNode.Right = currentNode.Left;
                        }
                        currentNode.Left = null;
                    }
                    else
                    {
                        if (currentNode == Root)
                        {
                            Root = currentNode.Left;
                        }
                        if (IsLeftNode)
                        {
                            parentNode.Left = currentNode.Left;
                        }
                        else
                        {
                            parentNode.Right = currentNode.Left;
                        }
                        NodeTreeMy<int> tempNode = currentNode.Left;
                        while (tempNode.Right!=null)
                        {
                            tempNode = tempNode.Right;
                        }
                        tempNode.Right = currentNode.Right;
                        currentNode.Left = null;
                        currentNode.Right = null;
                    }
                    return true;
                }
                else if (key < currentNode.Data)
                {
                    parentNode = currentNode;
                    currentNode = currentNode.Left;
                    IsLeftNode = true;
                }
                else
                {
                    parentNode = currentNode;
                    currentNode = currentNode.Right;
                    IsLeftNode = false;
                }
            }
            return false;
        }
 public BinarySearchTreeMy(int root)
 {
     Root = new NodeTreeMy<int>(root);
 }