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); }