Exemplo n.º 1
0
 public HeapNode(int _val)
 {
     val    = _val;
     parent = null;
     left   = null;
     right  = null;
 }
Exemplo n.º 2
0
            public int Delete()
            {
                if (root == null)
                {
                    Console.WriteLine("Heap is empty!!!");
                    return(-1);
                }
                else
                {
                    int returnVal = root.val;
                    root.val = last.val;
                    if (dummy.parent.left == dummy)
                    {
                        dummy.parent.left = null;
                    }
                    else
                    {
                        dummy.parent.right = null;
                    }
                    dummy = last;
                    FindLastPos();
                    MakeHeapFromRoot();

                    return(returnVal);
                }
            }
Exemplo n.º 3
0
 public HeapNode()
 {
     val    = 0;
     parent = null;
     left   = null;
     right  = null;
 }
Exemplo n.º 4
0
        public static HeapNode createHeap()
        {
            data     key  = new data(0, "");
            HeapNode next = null;
            HeapNode H    = new HeapNode(key, next);

            return(H);
        }
Exemplo n.º 5
0
        public void printHeap(HeapNode N)
        {
            HeapNode L = N;

            while (L != null)
            {
                Console.Write("\n" + L.key.pKey);
                L = L.next;
            }
        }
Exemplo n.º 6
0
        public void tailInsert(HeapNode H, data key)
        {
            int      j = 0;
            HeapNode L = H;

            while (L.next != null)
            {
                L = L.next;
            }
            L.next = new HeapNode(key, null);
        }
Exemplo n.º 7
0
            void MakeHeapFromRoot()
            {
                HeapNode curNode = root;

                while (curNode.left != null)
                {
                    if (curNode.right != null)
                    {
                        if (curNode.val < curNode.left.val)
                        {
                            if (curNode.left.val < curNode.right.val)
                            {
                                int tmp = curNode.val;
                                curNode.val       = curNode.right.val;
                                curNode.right.val = tmp;

                                curNode = curNode.right;
                            }
                            else
                            {
                                int tmp = curNode.val;
                                curNode.val      = curNode.left.val;
                                curNode.left.val = tmp;

                                curNode = curNode.left;
                            }
                        }
                        else if (curNode.val < curNode.right.val)
                        {
                            int tmp = curNode.val;
                            curNode.val       = curNode.right.val;
                            curNode.right.val = tmp;

                            curNode = curNode.right;
                        }
                        else
                        {
                            break;
                        }
                    }
                    else
                    {
                        if (curNode.val < curNode.left.val)
                        {
                            int tmp = curNode.val;
                            curNode.val      = curNode.left.val;
                            curNode.left.val = tmp;
                        }

                        break;
                    }
                }
            }
Exemplo n.º 8
0
        public void insertNode(HeapNode H, data key, int pos)
        {
            int      j = 0;
            HeapNode L = H;

            while (j < pos - 1)
            {
                L = L.next;
                j++;
            }
            HeapNode C = new HeapNode(key, L.next);

            L.next = C;
        }
Exemplo n.º 9
0
        public void deleteNode(HeapNode N, int pos)
        {
            int      j = 0;
            HeapNode L = N;

            while (j < pos - 1)
            {
                L = L.next;
                j++;
            }
            HeapNode K = L.next;

            L.next = L.next.next;
            K      = null;
        }
Exemplo n.º 10
0
            void TravelsByPre(HeapNode _root)
            {
                if (_root != dummy)
                {
                    Console.Write(_root.val + " ");
                }

                if (_root.left != null)
                {
                    TravelsByPre(_root.left);
                }
                if (_root.right != null)
                {
                    TravelsByPre(_root.right);
                }
            }
Exemplo n.º 11
0
 public void Insert(int _val)
 {
     if (root == null)
     {
         root         = dummy;
         root.val     = _val;
         last         = root;
         root.left    = dummy = new HeapNode();
         dummy.parent = root;
     }
     else
     {
         last     = dummy;
         last.val = _val;
         FindDummyPos();
         MakeHeapFromLeaf();
     }
 }
Exemplo n.º 12
0
            void MakeHeapFromLeaf()
            {
                HeapNode curNode = last;

                if (curNode != root)
                {
                    while (curNode.val > curNode.parent.val)
                    {
                        int tmp = curNode.val;
                        curNode.val        = curNode.parent.val;
                        curNode.parent.val = tmp;

                        curNode = curNode.parent;
                        if (curNode == root)
                        {
                            break;
                        }
                    }
                }
            }
Exemplo n.º 13
0
            void FindLastPos()
            {
                HeapNode curNode = last;

                if (last == root)
                {
                    root = null;
                    last = null;
                }
                else
                {
                    if (last.parent.right == last)
                    {
                        last = last.parent.left;
                    }
                    else
                    {
                        while ((curNode.parent.right != curNode) && (curNode.parent != root))
                        {
                            curNode = curNode.parent;
                        }

                        if (curNode.parent.left == curNode)
                        {
                            curNode = curNode.parent.right;
                        }
                        else
                        {
                            curNode = curNode.parent.left;
                        }

                        while (curNode.right != null)
                        {
                            curNode = curNode.right;
                        }

                        last = curNode;
                    }
                }
            }
Exemplo n.º 14
0
            void FindDummyPos()
            {
                HeapNode curNode = dummy;

                if (curNode.parent.left == dummy)
                {
                    dummy = new HeapNode();

                    curNode.parent.right = dummy;
                    dummy.parent         = curNode.parent;
                }
                else
                {
                    while (curNode.parent.left != curNode && curNode.parent != root)
                    {
                        curNode = curNode.parent;
                    }

                    if (curNode.parent.right == curNode)
                    {
                        curNode = curNode.parent.left;
                    }
                    else
                    {
                        curNode = curNode.parent.right;
                    }

                    while (curNode.left != null)
                    {
                        curNode = curNode.left;
                    }

                    dummy = new HeapNode();

                    curNode.left = dummy;
                    dummy.parent = curNode;
                }
            }
Exemplo n.º 15
0
 public HeapByLinked()
 {
     root  = null;
     last  = null;
     dummy = new HeapNode();
 }
Exemplo n.º 16
0
 public HeapNode(data key, HeapNode next)
 {
     this.key  = key;
     this.next = next;
 }