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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容