94. 二叉树的中序遍历

给定一个二叉树,返回它的中序 遍历。

示例:

输入: [1,null,2,3]
   1
    \
     2
    /
   3

输出: [1,3,2]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

递归法

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def inorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        
        if not root:
            return []
        
        return self.inorderTraversal(root.left) + [root.val] + self.inorderTraversal(root.right)

迭代法

思路:

  • 用栈做临时存储
  • 从根节点开始遍历,到最左的子节点,然后输出再访问右节点
# 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):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        
        result, stack = [], []
        curr_node = root
        
        while curr_node or stack:
            while curr_node: 
                stack.append(curr_node)
                curr_node = curr_node.left

            if stack:
                curr_node = stack.pop()
                result.append(curr_node.val)
                curr_node = curr_node.right

        return result
posted @ 2018-09-17 22:09  yuyin  阅读(55)  评论(0)    收藏  举报