# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param root TreeNode类 the root of binary tree
# @return int整型二维数组
#
class Solution:
    def threeOrders(self, root: TreeNode) -> List[List[int]]:
        # write code here
        a, b, c = [], [], []

        def dfs_a(pRoot):#先序,根-左-右
            if not pRoot:
                return
            a.append(pRoot.val)
            dfs_a(pRoot.left)
            dfs_a(pRoot.right)

        def dfs_b(pRoot):#中序,左-根-右
            if not pRoot:
                return
            dfs_b(pRoot.left)
            b.append(pRoot.val)
            dfs_b(pRoot.right)

        def dfs_c(pRoot):#后序,左-右-根
            if not pRoot:
                return
            dfs_c(pRoot.left)
            dfs_c(pRoot.right)
            c.append(pRoot.val)
        
        dfs_a(root)
        dfs_b(root)
        dfs_c(root)

        return [a,b,c]