94. Binary Tree Inorder Traversal(二叉树中序遍历)

题目链接

题目描述

Given a binary tree, return the inorder traversal of its nodes' values.

主要思路:

1.递归

保持左根右的顺序即可

代码:

def inorderTraversal(self, root):
    """
    :type root: TreeNode
    :rtype: List[int]
    """
    if root == None:
        return []
    left = self.inorderTraversal(root.left)
    right = self.inorderTraversal(root.right)
    return left + [root.val] + right

2.迭代

为了保持左根右的顺序,迭代中使用两个变量作为记录 current和frontier, current记录当前节点,frontier记录当前节点的所有根节点。

精华除了在于current和frontier概念的提出,同时还在于最后一句命令
current = current.right
这里分为两种情况,一种是current.right为空,则再次进行循环时,current变为frontier.pop(),这样就变成了原先的根节点。一种是current.right不为空,则又重新寻找该节点的左节点。总之始终保持着左根右的顺序。

代码

def inorderTraversal(self, root):
    """
    :type root: TreeNode
    :rtype: List[int]
    """
    if root == None:
        return []
    
    frontier = []
    current = root
    inorder = []
    while current != None or len(frontier) != 0:
        while current!=None:
            frontier.append(current)
            current = current.left
        current = frontier.pop()
        inorder.append(current.val)
        current = current.right
    return inorder

你可能感兴趣的:(94. Binary Tree Inorder Traversal(二叉树中序遍历))