示例#1
0
        public void Add(ref int[] trai, ref Graphics g, int newdata, ref cay node, ref int x, int height_pt, int width_pt, ref int toadodoctruoc, ref int toadongangtruoc)
        {
            if (node == null)
            {
                thao_tac.Themnut(height_pt, width_pt, newdata, ref x, trai, ref ngang, ref doc);
                node = new cay(newdata, doc, ngang);


                //MessageBox.Show(toadongangtruoc.ToString());
                if (x != 1)
                {
                    Draw_node.duongthang(ref g, node.Toadongang, node.Toadodoc, toadongangtruoc, toadodoctruoc);
                }
                Draw_node.eclip_yellow(ref g, node.Toadongang, node.Toadodoc, 40, 40, node.Data);
                Thread.Sleep(1000);
                Draw_node.eclip(ref g, node.Toadongang, node.Toadodoc, 40, 40, node.Data);
                toadodoctruoc   = node.Toadodoc;
                toadongangtruoc = node.Toadongang;


                // MessageBox.Show(toadodoctruoc.ToString() + " " + toadongangtruoc.ToString());
            }
            else
            {
                // tree.insert(ref g,newdata,ref trai,ref x,height_pt,width_pt,ngang,doc,ref toadodoctruoc,ref toadongangtruoc);
                if (newdata < node.Data)
                {
                    x++;
                    trai[x]         = 1;
                    toadodoctruoc   = node.Toadodoc;
                    toadongangtruoc = node.Toadongang;
                    Draw_node.eclip_red(ref g, node.Toadongang, node.Toadodoc, 40, 40, node.Data);
                    Thread.Sleep(1000);
                    Draw_node.eclip(ref g, node.Toadongang, node.Toadodoc, 40, 40, node.Data);
                    Add(ref trai, ref g, newdata, ref node.Left, ref x, height_pt, width_pt, ref toadodoctruoc, ref toadongangtruoc);
                }
                else
                {
                    x++;
                    trai[x]         = 0;
                    toadodoctruoc   = node.Toadodoc;
                    toadongangtruoc = node.Toadongang;
                    Draw_node.eclip_red(ref g, node.Toadongang, node.Toadodoc, 40, 40, node.Data);
                    Thread.Sleep(1000);
                    Draw_node.eclip(ref g, node.Toadongang, node.Toadodoc, 40, 40, node.Data);
                    Add(ref trai, ref g, newdata, ref node.Right, ref x, height_pt, width_pt, ref toadodoctruoc, ref toadongangtruoc);
                }
            }
            Draw_node.eclip_white(ref g, 10, 10, 40, 40, newdata);
        }
示例#2
0
        public int search(ref Graphics g, cay node, int key)
        {
            Draw_node.eclip_red(ref g, 10, 10, 40, 40, key);
            if (node == null)
            {
                return(0);
            }

            // MessageBox.Show(A[0].ToString() + i.ToString());
            if (node.Data == key)
            {
                Draw_node.eclip_yellow(ref g, node.Toadongang, node.Toadodoc, 40, 40, node.Data);
                Thread.Sleep(1000);
                Draw_node.eclip(ref g, node.Toadongang, node.Toadodoc, 40, 40, node.Data);
                return(1);
            }
            if (node.Data < key)
            {
                Draw_node.eclip_red(ref g, node.Toadongang, node.Toadodoc, 40, 40, node.Data);
                Thread.Sleep(1000);
                Draw_node.eclip(ref g, node.Toadongang, node.Toadodoc, 40, 40, node.Data);
                return(search(ref g, node.Right, key));
            }
            else
            if (node.Data > key)
            {
                Draw_node.eclip_red(ref g, node.Toadongang, node.Toadodoc, 40, 40, node.Data);
                Thread.Sleep(1000);
                Draw_node.eclip(ref g, node.Toadongang, node.Toadodoc, 40, 40, node.Data);
                return(search(ref g, node.Left, key));
            }
            else
            {
                return(0);
            }
        }
示例#3
0
        public int delete(ref Graphics g, ref cay node, int data)
        {
            Draw_node.eclip_red(ref g, 10, 10, 40, 40, data);
            cay prdelnode = null;
            int ontheleft = 0;
            cay delnode   = node;

            while (delnode != null)
            {
                if (delnode.Data == data)
                {
                    break;
                }
                prdelnode = delnode;

                if (delnode.Data > data)
                {
                    //MessageBox.Show("co dô");
                    Draw_node.eclip_red(ref g, delnode.Toadongang, delnode.Toadodoc, 40, 40, delnode.Data);
                    Thread.Sleep(1000);
                    Draw_node.eclip(ref g, delnode.Toadongang, delnode.Toadodoc, 40, 40, delnode.Data);
                    delnode   = delnode.Left;
                    ontheleft = 1;
                }
                else
                {
                    //MessageBox.Show("cung co co dô");
                    Draw_node.eclip_red(ref g, delnode.Toadongang, delnode.Toadodoc, 40, 40, delnode.Data);
                    Thread.Sleep(1000);
                    Draw_node.eclip(ref g, delnode.Toadongang, delnode.Toadodoc, 40, 40, delnode.Data);
                    delnode   = delnode.Right;
                    ontheleft = 0;
                }
            }
            // MessageBox.Show(Convert.ToString(prdelnode.Data));
            if (delnode == null)
            {
                return(0);
            }
            if (prdelnode == null)//delnode là nút gốc
            {
                if (delnode.Left == null && delnode.Right == null)
                {
                    Draw_node.eclip_white(ref g, delnode.Toadongang, delnode.Toadodoc, 40, 40, delnode.Data);
                    node = null;
                }
                else
                {
                    if (delnode.Left == null)// delnode có 1 cây con phải
                    {
                        Draw_node.eclip_white(ref g, delnode.Toadongang, delnode.Toadodoc, 40, 40, delnode.Data);
                        Draw_node.duongthang_trang(ref g, delnode.Toadongang, delnode.Toadodoc, delnode.Right.Toadongang, delnode.Right.Toadodoc);
                        Draw_node.eclip(ref g, delnode.Right.Toadongang, delnode.Right.Toadodoc, 40, 40, delnode.Right.Data);
                        node          = node.Right;
                        delnode.Right = null;
                    }
                    else
                    {
                        if (delnode.Right == null) // delnode có 1 cây con trái
                        {
                            Draw_node.eclip_white(ref g, delnode.Toadongang, delnode.Toadodoc, 40, 40, delnode.Data);
                            Draw_node.duongthang_trang(ref g, delnode.Toadongang, delnode.Toadodoc, delnode.Left.Toadongang, delnode.Left.Toadodoc);
                            Draw_node.eclip(ref g, delnode.Left.Toadongang, delnode.Left.Toadodoc, 40, 40, delnode.Left.Data);
                            node         = node.Left;
                            delnode.Left = null;
                        }
                    }
                }
            }
            else
            {
                if (delnode.Left == null && delnode.Right == null)// lá
                {
                    if (ontheleft == 1)
                    {
                        Draw_node.eclip_yellow(ref g, prdelnode.Left.Toadongang, prdelnode.Left.Toadodoc, 40, 40, prdelnode.Left.Data);
                        Thread.Sleep(1000);
                        Draw_node.eclip_white(ref g, prdelnode.Left.Toadongang, prdelnode.Left.Toadodoc, 40, 40, prdelnode.Left.Data);
                        Draw_node.duongthang_trang(ref g, prdelnode.Left.Toadongang, prdelnode.Left.Toadodoc, prdelnode.Toadongang, prdelnode.Toadodoc);
                        Draw_node.eclip(ref g, prdelnode.Toadongang, prdelnode.Toadodoc, 40, 40, prdelnode.Data);
                        prdelnode.Left = null;
                    }
                    else
                    {
                        Draw_node.eclip_yellow(ref g, prdelnode.Right.Toadongang, prdelnode.Right.Toadodoc, 40, 40, prdelnode.Right.Data);
                        Thread.Sleep(1000);
                        Draw_node.eclip_white(ref g, prdelnode.Right.Toadongang, prdelnode.Right.Toadodoc, 40, 40, prdelnode.Right.Data);
                        Draw_node.duongthang_trang(ref g, prdelnode.Right.Toadongang, prdelnode.Right.Toadodoc, prdelnode.Toadongang, prdelnode.Toadodoc);
                        Draw_node.eclip(ref g, prdelnode.Toadongang, prdelnode.Toadodoc, 40, 40, prdelnode.Data);
                        prdelnode.Right = null;
                    }
                }
                else
                {
                    if (delnode.Left == null)// delnode có 1 cây con phải
                    {
                        if (ontheleft == 1)
                        {
                            prdelnode.Left = delnode.Right;
                        }
                        else
                        {
                            prdelnode.Right = delnode.Right;
                        }
                        Draw_node.eclip_yellow(ref g, delnode.Toadongang, delnode.Toadodoc, 40, 40, delnode.Data);
                        Thread.Sleep(1000);
                        Draw_node.eclip_white(ref g, delnode.Toadongang, delnode.Toadodoc, 40, 40, delnode.Data);
                        Draw_node.duongthang_trang(ref g, prdelnode.Toadongang, prdelnode.Toadodoc, delnode.Toadongang, delnode.Toadodoc);
                        Draw_node.duongthang_trang(ref g, delnode.Right.Toadongang, delnode.Right.Toadodoc, delnode.Toadongang, delnode.Toadodoc);
                        Draw_node.duongthang(ref g, delnode.Right.Toadongang, delnode.Right.Toadodoc, prdelnode.Toadongang, prdelnode.Toadodoc);
                        Draw_node.eclip(ref g, prdelnode.Toadongang, prdelnode.Toadodoc, 40, 40, prdelnode.Data);
                        Draw_node.eclip(ref g, delnode.Right.Toadongang, delnode.Right.Toadodoc, 40, 40, delnode.Right.Data);
                        delnode.Right = null;
                    }
                    else // delnode có 1 cây con trái
                    {
                        if (delnode.Right == null)
                        {
                            if (ontheleft == 1)
                            {
                                prdelnode.Left = delnode.Left;
                            }
                            else
                            {
                                prdelnode.Right = delnode.Left;
                            }
                            Draw_node.eclip_yellow(ref g, delnode.Toadongang, delnode.Toadodoc, 40, 40, delnode.Data);
                            Thread.Sleep(1000);
                            Draw_node.eclip_white(ref g, delnode.Toadongang, delnode.Toadodoc, 40, 40, delnode.Data);
                            Draw_node.duongthang_trang(ref g, prdelnode.Toadongang, prdelnode.Toadodoc, delnode.Toadongang, delnode.Toadodoc);
                            Draw_node.duongthang_trang(ref g, delnode.Left.Toadongang, delnode.Left.Toadodoc, delnode.Toadongang, delnode.Toadodoc);
                            Draw_node.duongthang(ref g, delnode.Left.Toadongang, delnode.Left.Toadodoc, prdelnode.Toadongang, prdelnode.Toadodoc);
                            Draw_node.eclip(ref g, prdelnode.Toadongang, prdelnode.Toadodoc, 40, 40, prdelnode.Data);
                            Draw_node.eclip(ref g, delnode.Left.Toadongang, delnode.Left.Toadodoc, 40, 40, delnode.Left.Data);
                            delnode.Left = null;
                        }
                    }
                }
            }
            if (delnode.Left != null && delnode.Right != null)// dell node có 2 cây con
            {
                //y = 2;
                Draw_node.eclip_red(ref g, delnode.Toadongang, delnode.Toadodoc, 40, 40, delnode.Data);
                Thread.Sleep(1000);
                cay MLNode   = delnode.Right;
                cay PrMLNode = delnode;
                while (MLNode.Left != null)
                {
                    Draw_node.eclip_pink(ref g, MLNode.Toadongang, MLNode.Toadodoc, 40, 40, MLNode.Data);
                    Thread.Sleep(1000);
                    Draw_node.eclip(ref g, MLNode.Toadongang, MLNode.Toadodoc, 40, 40, MLNode.Data);
                    PrMLNode = MLNode;
                    MLNode   = MLNode.Left;
                }
                Draw_node.eclip_pink(ref g, MLNode.Toadongang, MLNode.Toadodoc, 40, 40, MLNode.Data);
                Thread.Sleep(1000);
                Draw_node.eclip_yellow(ref g, MLNode.Toadongang, MLNode.Toadodoc, 40, 40, MLNode.Data);
                Thread.Sleep(1000);
                //themang[vttmang] = MLNode.Data;
                delnode.Data = MLNode.Data;
                if (PrMLNode == delnode)
                {
                    PrMLNode.Right = MLNode.Right;
                }
                else
                {
                    PrMLNode.Left = MLNode.Right;
                }

                if (MLNode.Right != null)
                {
                    // kiemtra = 1;

                    Draw_node.eclip_white(ref g, MLNode.Toadongang, MLNode.Toadodoc, 40, 40, MLNode.Data);
                    Draw_node.duongthang_trang(ref g, PrMLNode.Toadongang, PrMLNode.Toadodoc, MLNode.Toadongang, MLNode.Toadodoc);
                    Draw_node.duongthang_trang(ref g, MLNode.Right.Toadongang, MLNode.Right.Toadodoc, MLNode.Toadongang, MLNode.Toadodoc);
                    Draw_node.duongthang(ref g, MLNode.Right.Toadongang, MLNode.Right.Toadodoc, PrMLNode.Toadongang, PrMLNode.Toadodoc);
                    Draw_node.eclip(ref g, PrMLNode.Toadongang, PrMLNode.Toadodoc, 40, 40, PrMLNode.Data);
                    Draw_node.eclip(ref g, MLNode.Right.Toadongang, MLNode.Right.Toadodoc, 40, 40, MLNode.Right.Data);
                }
                else
                {
                    Draw_node.eclip_white(ref g, MLNode.Toadongang, MLNode.Toadodoc, 40, 40, MLNode.Data);
                    Draw_node.duongthang_trang(ref g, PrMLNode.Toadongang, PrMLNode.Toadodoc, MLNode.Toadongang, MLNode.Toadodoc);
                    Draw_node.eclip(ref g, PrMLNode.Toadongang, PrMLNode.Toadodoc, 40, 40, PrMLNode.Data);
                }
                Draw_node.eclip(ref g, delnode.Toadongang, delnode.Toadodoc, 40, 40, MLNode.Data);
                delnode = MLNode;
            }

            delnode = null;
            Draw_node.eclip_white(ref g, 10, 10, 40, 40, data);
            return(1);
        }