import java.util.*;

/*

  • public class TreeNode {
  • int val = 0;
  • TreeNode left = null;
  • TreeNode right = null;
  • } */

public class Solution { /** * * @param root TreeNode类 the root of binary tree * @return int整型二维数组 */ private List list = new ArrayList<>(); public int[][] threeOrders (TreeNode root) { if(root == null){ return new int[3][0]; } preOrder(root); midOrder(root); postOrder(root); int[][] arr = new int[3][list.size() / 3]; int index = 0; for(int i = 0;i < 3;i ++){ for(int j = 0;j <list.size() / 3;j++){ arr[i][j] = list.get(index ++); } }

    return arr;
    // write code here
}
public void preOrder(TreeNode root){
    if(root == null){
        return;
    }
    list.add(root.val);
    preOrder(root.left);
    preOrder(root.right);
}
public void midOrder(TreeNode root){
    if(root == null){
        return;
    }
    
    midOrder(root.left);
    list.add(root.val);
    midOrder(root.right);
}
public void postOrder(TreeNode root){
    if(root == null){
        return;
    }
    
    postOrder(root.left);
   
    postOrder(root.right);
    list.add(root.val);
    
}

} // import java.util.*;

// /* // * public class TreeNode { // * int val = 0; // * TreeNode left = null; // * TreeNode right = null; // * } // */

// public class Solution { // /** // * // * @param root TreeNode类 the root of binary tree // * @return int整型二维数组 // */ // private List list = new ArrayList<>(); // public int[][] threeOrders (TreeNode root) { // // write code here // if(root==null) { // return new int[3][0]; // } // preOrder(root); // inOrder(root); // afterOrder(root); // int[][] res = new int[3][list.size()/3]; // int index = 0; // for(int i=0;i<3;i++) { // for(int j=0;j<list.size()/3;j++) { // res[i][j] = list.get(index++); // } // } // return res; // }

// public void preOrder(TreeNode root) { // if(root==null) { // return; // } // list.add(root.val); // preOrder(root.left); // preOrder(root.right); // }

// public void inOrder(TreeNode root) { // if(root==null) { // return; // } // inOrder(root.left); // list.add(root.val); // inOrder(root.right); // }

// public void afterOrder(TreeNode root) { // if(root==null) { // return; // } // afterOrder(root.left); // afterOrder(root.right); // list.add(root.val); // } // }