コード例 #1
0
 public void InsertNodeTo(BinarySearchTreeNode <T> node, BinarySearchTreeNode <T> newNode)
 {
     if (node.CompareTo(newNode) > 0)
     {
         // new node is lesser
         if (node.HasLeft)
         {
             this.InsertNodeTo(node.Left, newNode);
             return;
         }
         else
         {
             node.Left        = newNode;
             node.Left.Parent = node;
             return;
         }
     }
     else
     {
         // new node is greater
         if (node.HasRight)
         {
             this.InsertNodeTo(node.Right, newNode);
             return;
         }
         else
         {
             node.Right        = newNode;
             node.Right.Parent = node;
             return;
         }
     }
 }
コード例 #2
0
        public int Level(BinarySearchTreeNode <T> searchNode)
        {
            if (searchNode == null)
            {
                return(-1);
            }
            int level = 1;
            Queue <BinarySearchTreeNode <T> > q = new Queue <BinarySearchTreeNode <T> >();

            q.Enqueue(Root);
            q.Enqueue(null);
            while (q.Count > 0)
            {
                BinarySearchTreeNode <T> current = q.Dequeue();
                if (current == null)
                {
                    try
                    {
                        if (q.Peek() != null)
                        {
                            q.Enqueue(null);
                        }
                        ++level;
                    }
                    catch (Exception) {}
                }
                else
                {
                    if (searchNode.CompareTo(current) == 0)
                    {
                        break;
                    }
                    if (current.HasLeft)
                    {
                        q.Enqueue(current.Left);
                    }
                    if (current.HasRight)
                    {
                        q.Enqueue(current.Right);
                    }
                }
            }
            return(level);
        }