private static int SetJumpOrderHelper(PostingListNode listNode, int order)
        {
            if (listNode != null && listNode.Order == -1)
            {
                listNode.Order = order++;
                order          = SetJumpOrderHelper(listNode.Jump, order);
                order          = SetJumpOrderHelper(listNode.Next, order);
            }

            return(order);
        }
        public static void SetJumpOrderWithStack(PostingListNode listNode)
        {
            var stack = new Stack <PostingListNode>();
            var order = 0;

            stack.Push(listNode);

            while (stack.Count > 0)
            {
                var curr = stack.Pop();
                if (curr != null && curr.Order == -1)
                {
                    curr.Order = order++;
                    // Stack is last-in, first -out, and we want to process
                    // the jump node first, so push next, then push jump.
                    stack.Push(curr.Next);
                    stack.Push(curr.Jump);
                }
            }
        }
 public static void SetJumpOrderRecursive(PostingListNode list)
 {
     SetJumpOrderHelper(list, 0);
 }