Esempio n. 1
0
        public void insert(int element, ref int maxlv, FormBST F)
        {
            Node        newnode, currentNode = ROOT, parent = currentNode;
            Point       LocationNode;
            int         lvNode = 0;
            ButtonClass newBT  = new ButtonClass();

            newBT.Click   += new EventHandler(F.buttonClass_Click);
            newBT.Text     = Convert.ToString(element);
            newBT.Location = new Point(F.Width - 70, 100);
            F.Controls.Add(newBT);
            F.Update();
            Thread.Sleep(500);
            find(element, ref parent, ref currentNode, ref lvNode);
            if (lvNode > maxlv)
            {
                maxlv = lvNode;
            }
            if (ROOT != null)
            {
                parent.ButtonBST.BackColor = Color.Blue;
                parent.ButtonBST.Update();
                Thread.Sleep(500);
                movingTree(ROOT, maxlv, newBT, F);
            }
            if (currentNode != null)
            {
                MessageBox.Show("Duplicates words not allowed");
                F.Controls.Remove(newBT);
                newBT.Dispose();

                currentNode.ButtonBST.BackColor = SystemColors.ButtonFace;
                currentNode.ButtonBST.UseVisualStyleBackColor = true;
                currentNode.ButtonBST.Update();

                parent.ButtonBST.BackColor = SystemColors.ButtonFace;
                parent.ButtonBST.UseVisualStyleBackColor = true;
                parent.ButtonBST.Update();
            }
            else
            {
                newnode   = new Node(newBT, null, null, lvNode);
                newnode.g = F.CreateGraphics();
                if (parent == null)
                {
                    ROOT         = newnode;
                    LocationNode = new Point(F.Width / 2 - 30, 100);
                    F.Controls.Add(ROOT.ButtonBST);
                    move(ROOT, LocationNode, maxlv);
                }
                else if (element < Convert.ToInt32(parent.ButtonBST.Text))
                {
                    parent.lchild = newnode;
                    if (parent.ButtonBST.Location.Y + 100 >= F.Height)
                    {
                        F.Height += 50;
                        F.Update();
                        Thread.Sleep(500);
                    }

                    LocationNode = new Point(parent.ButtonBST.Location.X - (int)(30 * Math.Pow(2, (maxlv - parent.lchild.level))), parent.ButtonBST.Location.Y + 50);
                    F.Controls.Add(parent.lchild.ButtonBST);
                    move(parent.lchild, LocationNode, maxlv);
                    parent.lchild.g = F.CreateGraphics();
                    parent.lchild.g.DrawLine(new Pen(Color.Black), parent.ButtonBST.Location.X + 25, parent.ButtonBST.Location.Y + 25, parent.lchild.ButtonBST.Location.X + 25, parent.lchild.ButtonBST.Location.Y + 25);
                }
                else
                {
                    parent.rchild = newnode;
                    if (parent.ButtonBST.Location.Y + 100 >= F.Height)
                    {
                        F.Height += 50;
                        F.Update();
                        Thread.Sleep(500);
                    }
                    LocationNode = new Point(parent.ButtonBST.Location.X + (int)(30 * Math.Pow(2, (maxlv - parent.rchild.level))), parent.ButtonBST.Location.Y + 50);
                    F.Controls.Add(parent.rchild.ButtonBST);
                    move(parent.rchild, LocationNode, maxlv);
                }
                Thread.Sleep(500);
                if (parent != null)
                {
                    parent.ButtonBST.BackColor = SystemColors.ButtonFace;
                    parent.ButtonBST.UseVisualStyleBackColor = true;
                    parent.ButtonBST.Update();
                }
            }
        }
Esempio n. 2
0
        //public void inorder(Node ptr)
        //{
        //    if (ROOT == null)
        //    {
        //        Console.WriteLine("Tree is empty");
        //        return;
        //    }
        //    if (ptr != null)
        //    {
        //        inorder(ptr.lchild);
        //        Console.WriteLine(ptr.ButtonBST.Text + "   ");
        //        inorder(ptr.rchild);
        //    }
        //}

        //public void preorder(Node ptr, Node parentNode, int MaxlvNode, FormBST f)
        //{
        //    if (ROOT == null)
        //    {
        //        Console.WriteLine("Tree is empty");
        //        return;
        //    }
        //    if (ptr != null)
        //    {
        //        Console.WriteLine(ptr.ButtonBST.Text + "   ");
        //        inorder(ptr.lchild);
        //        inorder(ptr.rchild);
        //    }
        //}

        //public void postorder(Node ptr)
        //{
        //    if (ROOT == null)
        //    {
        //        Console.WriteLine("Tree is empty");
        //        return;
        //    }
        //    if (ptr != null)
        //    {
        //        postorder(ptr.lchild);
        //        postorder(ptr.rchild);
        //        Console.WriteLine(ptr.ButtonBST.Text + "   ");
        //    }
        //}

        public void remove(int element, Node Subtree, FormBST F, int levelmax, Node parent)
        {
            Node currentNode = Subtree;
            int  lvNode      = 0;

            find(element, ref parent, ref currentNode, ref lvNode);
            if (currentNode == null)
            {
                MessageBox.Show("Not Found");
            }
            else if (currentNode.lchild == null && currentNode.rchild == null) //0 Xac dinh Delete Node la Leaf Node
            {
                if (currentNode == Subtree)
                {
                    F.Controls.Remove(Subtree.ButtonBST);
                    Subtree.ButtonBST.Dispose();
                    if (Subtree == ROOT)
                    {
                        ROOT = null;
                    }
                    else if (parent != null)
                    {
                        parent.rchild = null;
                    }
                    else
                    {
                        Subtree = null;
                    }
                }
                else if (currentNode == parent.lchild)
                {
                    F.Controls.Remove(parent.lchild.ButtonBST);
                    parent.lchild.ButtonBST.Dispose();
                    parent.lchild = null;
                }
                else
                {
                    F.Controls.Remove(parent.rchild.ButtonBST);
                    parent.rchild.ButtonBST.Dispose();
                    parent.rchild = null;
                }
            }
            else if (currentNode.lchild == null ^ currentNode.rchild == null) //1 Xac dinh Delete Node co 1 child
            {
                Node Child = null;
                if (currentNode.lchild != null)
                {
                    Child = currentNode.lchild;
                    currentNode.lchild = null;
                }
                if (currentNode.rchild != null)
                {
                    Child = currentNode.rchild;
                    currentNode.rchild = null;
                }
                if (currentNode == Subtree)
                {
                    F.Controls.Remove(Subtree.ButtonBST);
                    Subtree.ButtonBST.Dispose();
                    if (parent != null)
                    {
                        parent.rchild = Child;
                    }
                    else if (Subtree == ROOT)
                    {
                        ROOT = Child;
                    }
                    else
                    {
                        Subtree = Child;
                    }
                }
                else if (currentNode == parent.lchild)
                {
                    F.Controls.Remove(parent.lchild.ButtonBST);
                    parent.lchild.ButtonBST.Dispose();
                    parent.lchild = Child;
                }
                else
                {
                    F.Controls.Remove(parent.rchild.ButtonBST);
                    parent.rchild.ButtonBST.Dispose();
                    parent.rchild = Child;
                }
                move(Child, currentNode.ButtonBST.Location, levelmax);
            }
            else//////////////////////////////////////////////////////////////////2 Xac dinh Delete Node co 2 child
            {
                Node Inorder_suc = currentNode.rchild;
                while (Inorder_suc.lchild != null)
                {
                    Inorder_suc = Inorder_suc.lchild;
                }
                if (currentNode == Subtree)
                {
                    string tmp = Inorder_suc.ButtonBST.Text;
                    Inorder_suc.ButtonBST.Text = Subtree.ButtonBST.Text;
                    Subtree.ButtonBST.Text     = tmp;
                    Subtree.ButtonBST.Update();
                }
                else if (currentNode == parent.lchild)
                {
                    string tmp = Inorder_suc.ButtonBST.Text;
                    Inorder_suc.ButtonBST.Text   = parent.lchild.ButtonBST.Text;
                    parent.lchild.ButtonBST.Text = tmp;
                    parent.lchild.ButtonBST.Update();
                }
                else
                {
                    string tmp = Inorder_suc.ButtonBST.Text;
                    Inorder_suc.ButtonBST.Text   = parent.rchild.ButtonBST.Text;
                    parent.rchild.ButtonBST.Text = tmp;
                    parent.rchild.ButtonBST.Update();
                }
                Inorder_suc.ButtonBST.Update();
                if (parent == null)
                {
                    parent = ROOT;
                }
                else
                {
                    if (parent != null)
                    {
                        parent.ButtonBST.BackColor = SystemColors.ButtonFace;
                        parent.ButtonBST.UseVisualStyleBackColor = true;
                        parent.ButtonBST.Update();
                    }
                    parent = currentNode;
                }
                if (parent != null)
                {
                    parent.ButtonBST.BackColor = SystemColors.ButtonFace;
                    parent.ButtonBST.UseVisualStyleBackColor = true;
                    parent.ButtonBST.Update();
                }
                if (currentNode != null)
                {
                    currentNode.ButtonBST.BackColor = SystemColors.ButtonFace;
                    currentNode.ButtonBST.UseVisualStyleBackColor = true;
                    currentNode.ButtonBST.Update();
                }
                remove(Convert.ToInt32(Inorder_suc.ButtonBST.Text), currentNode.rchild, F, levelmax, parent);
            }
            if (parent != null)
            {
                parent.ButtonBST.BackColor = SystemColors.ButtonFace;
                parent.ButtonBST.UseVisualStyleBackColor = true;
                parent.ButtonBST.Update();
            }
            if (currentNode != null)
            {
                currentNode.ButtonBST.BackColor = SystemColors.ButtonFace;
                currentNode.ButtonBST.UseVisualStyleBackColor = true;
                currentNode.ButtonBST.Update();
            }
            currentNode = null;
            parent      = null;
        }