题目
给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
   1
    \
     2
    /
   3
输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?
解法
思路:
- 使用栈来解决,优点是运行速度快,缺点是比较难记忆,我在纸上画图,才捋清楚逻辑。从根节点开始,一直遍历左子树,遍历过程中,将遍历到的节点入栈,直到左子树为空,这时候就可以将栈顶的节点出栈,append到结果。 
 然后开始遍历栈顶节点的右子树,从右子树的根节点开始,一直遍历它的左子树,和第一步类似。
 LeetCode题解里有示例图,可以结合示例图来理解。
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def inorderTraversal(self, root: TreeNode) -> List[int]:
        result = []
        s, cur = [], root
        
        while cur or len(s):
            while cur:
                s.append(cur)
                cur = cur.left
            cur = s.pop()
            result.append(cur.val)
            cur = cur.right           
        return result- 递归,递归的解法比较简单。
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def inorderTraversal(self, root: TreeNode) -> List[int]:
        if not root:
            return []
        elif root.left and root.right:
            return self.inorderTraversal(root.left) + [root.val] + self.inorderTraversal(root.right)
        elif root.left:
            return self.inorderTraversal(root.left) + [root.val]
        elif root.right:
            return [root.val] + self.inorderTraversal(root.right)
        else:
            return [root.val]
