Ejemplo n.º 1
0
 public static bool HasParent(HeapNode r)
 {
     if (r.index > 0)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Ejemplo n.º 2
0
        public static void HeapifyUp(HeapNode last)
        {
            var  lastNode      = last;
            bool isNodeInPlace = false;

            while (HasParent(lastNode) && !isNodeInPlace)
            {
                var parentNode = GetParentNode(lastNode);
                if (parentNode.data > lastNode.data)
                {
                    var tempData = lastNode.data;
                    lastNode.data   = parentNode.data;
                    parentNode.data = tempData;
                    lastNode        = parentNode;
                }
                else
                {
                    isNodeInPlace = true;
                }
            }
        }
Ejemplo n.º 3
0
        public static void Enqueue(int data)
        {
            if (root == null)
            {
                root = new HeapNode(data, 0);
            }
            else
            {
                var lastNode = GetLastNode(root);

                if (lastNode.left == null)
                {
                    lastNode.left = new HeapNode(data, GetLeftIndex(lastNode.index));
                    HeapifyUp(lastNode.left);
                }
                else if (lastNode.right == null)
                {
                    lastNode.right = new HeapNode(data, GetRightIndex(lastNode.index));
                    HeapifyUp(lastNode.right);
                }
            }
        }
Ejemplo n.º 4
0
        public static HeapNode GetLastNode(HeapNode r)
        {
            if (r == null)
            {
                return(null);
            }
            Queue <HeapNode> q = new Queue <HeapNode>();

            q.Enqueue(r);

            while (q.Count > 0)
            {
                var current = q.Dequeue();
                if (current.left == null || current.right == null)
                {
                    return(current);
                }
                q.Enqueue(current.left);
                q.Enqueue(current.right);
            }

            return(null);
        }