边工作边刷题:70天一遍leetcode: day 20-1

Binary Tree Inorder Traversal

要点:iteration解法更深入考察了结点指针在binary tree层级间的移动规律。

  • stack用来记录上层未访问的结点,这样之后还可以访问到。而current指针作为一个indicator,如果为null,表示上层结点对应的左子树已经遍历完了,应该pop。如果不为null,应该入栈变为“上层”结点,继续遍历左子树。
  • 当下层左子树遍历完毕,应该访问本结点并且出栈。因为是inorder,出栈并不代表一直向上,而是要继续向右子树开始新的向下。
  • 这题的画面感有一直向左下=>上升=>继续右下
# 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]
        """
        cur = root
        stk = []
        res = []
        while cur or stk:
            if cur:
                stk.append(cur)
                cur=cur.left
            else:
                root = stk.pop()
                res.append(root.val)
                cur=root.right
        return res
        
posted @ 2016-04-29 09:59  absolute100  阅读(111)  评论(0编辑  收藏  举报