docs: protected static int postorder_dfs( int j , int k , int []w, int[] post, int N ) {
          final int next = N;
          final int stack = 2*N;
          int top = 0; // top of the stack
          w[stack+top] = j;
          while( top >= 0 ) {
              int p = w[stack+top]; // next index in the stack to process
              int i = w[p];         // yongest child of p
  
              if( i == -1 ) {
                  // p has no more unordered children left to process
                  top--;
                  post[k++] = p;
              } else {
                  w[p] = w[next+i];
                  top++;
                  w[stack + top] = i;
              }
          }
          return k;
      }