• 先序:根左右
  • 中序:左根右
  • 后序:左右根

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

public class Solution {
    public int[][] threeOrders (TreeNode root) {
        // write code here
        int[][] arr = new int[3][];
        List<Integer> list = new ArrayList<>();
        
        preorder(root,list);
        arr[0] = listToArray(list);
        list.clear();
        
        inorder(root,list);
        arr[1] = listToArray(list);
        list.clear();

        postorder(root,list);
        arr[2] = listToArray(list);
        list.clear();
        return arr;
    }
    
    public int[] listToArray(List<Integer> list){
        return list.stream().mapToInt(Integer::valueOf).toArray();
    }


    /**
     * 先序遍历的原则是:先根、再左、再右。
     * @param root
     * @param list
     */
    private void preorder(TreeNode root, List<Integer> list){
        if(root != null){
            list.add(root.val);
            preorder(root.left,list);
            preorder(root.right,list);
        }
    }

    /**
     * 中序遍历的原则是:先左、再根、再右
     * @param root
     * @param list
     */
    private void inorder(TreeNode root, List<Integer> list){
        if(root != null){
            inorder(root.left,list);
            list.add(root.val);
            inorder(root.right,list);
        }
    }

    /**
     * 后序遍历的原则是:先左、再右、再根
     * @param root
     * @param list
     */
    private void postorder(TreeNode root, List<Integer> list){
        if(root != null){
            postorder(root.left,list);
            postorder(root.right,list);
            list.add(root.val);

        }
    }
}