# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

#
# 
# @param root TreeNode类 
# @return int整型一维数组
#
class Solution:
    def preorderTraversal(self , root ):
        # write code here
        # 
        # **************递归法************
        # p = []
        # def dfs(r):
        #     if r == None :
        #         return []
        #     p.append(r.val)
        #     dfs(r.left)
        #     dfs(r.right)
        # dfs(root)
        # return p
        # **************递归法************

        # **************迭代法************
        def inorder_traversal(root):
            stack = []
            output = []
            p = root
            if not p:
                return output
            while len(stack) > 0 or p is not None:
                while p:
                    stack.append(p)
                    output.append(p.val)
                    p = p.left                 
                p = stack.pop()
                p = p.right
                # if p.right != None:
                #     stack.append(p.right)
            return output
        return inorder_traversal(root)
        # **************迭代法************