import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * 二叉树的中序遍历
     * 
     * @param root TreeNode类 
     * @return int整型一维数组
     */
    
    public int[] inorderTraversal (TreeNode root) {
        // write code here
        //特殊值处理
        if(root == null){
            return new int[0];
        }
        ArrayList<Integer> arrayList = new ArrayList<>();//创建一个链表
        order(root,arrayList);//中根遍历
        Object[] obj = arrayList.toArray();//链表转换为Object数组
        int length = obj.length;
        int[] arr = new int[length];
        //Object数组转换为整形数组
        for(int i=0;i<length;i++){
            arr[i] = (int)obj[i];
        }
        
        return arr;
    }
    
    public void order(TreeNode root,ArrayList<Integer> arrayList){
        //递归出口
        if(root == null){
            return ;
        }
        
        order(root.left,arrayList);//遍历左子树
        arrayList.add(root.val);//遍历根
        order(root.right,arrayList);//遍历右子树
    }
}