'''
解题思路:
思路:
先序:根左右,先存当前根节点,然后遍历左子树,最后遍历右子树
中序:左根右,先遍历左子树,再保存根节点,最后遍历右子树
后序:左右根,先遍历左子树,再遍历右子树,最后保存根节点
'''
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整型二维数组
#
pre = []
def dfs_pre(root):
    if not root:
        return
    pre.append(root.val)
    dfs_pre(root.left)
    dfs_pre(root.right)

mid = []
def dfs_mid(root):
    if not root:
        return
    dfs_mid(root.left)
    mid.append(root.val)    
    dfs_mid(root.right)

post = []
def dfs_post(root):
    if not root:
        return
    dfs_post(root.left)
    dfs_post(root.right)
    post.append(root.val)   

class Solution:
    def threeOrders(self , root ):
        # write code here
        dfs_pre(root)
        dfs_mid(root)
        dfs_post(root)        
        return [pre,mid,post]