private void pushLongestPathFrom(final IOperandTreeNode node) {
    IOperandTreeNode current = node;

    do {
      m_traversalStack.push(new Pair<IOperandTreeNode, Integer>(current, 0));

      if ((current.getChildren().size() <= 1)
          || (current.getType() == ExpressionType.EXPRESSION_LIST)) {
        break;
      }

      current = current.getChildren().get(0);

    } while (true);
  }
Pushes a path of nodes in correct traversal order onto the stack. The path stops either when a
leaf is reached or when a node with one child is reached since nodes with one child need to be
processed before its children are processed.

<p>If a node with more than one child is found the left-most child is chosen because so far all
operands are commutative and it does not matter which child to chose first.

@param node The start node of the path.
java/zylib/src/main/java/com/google/security/zynamics/zylib/disassembly/OperandOrderIterator.java