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記錄當前節(jié)點,frontier記錄當前節(jié)點的所有根節(jié)點。

精華除了在于current和frontier概念的提出,同時還在于最后一句命令
current = current.right
這里分為兩種情況,一種是current.right為空,則再次進行循環(huán)時,current變?yōu)閒rontier.pop(),這樣就變成了原先的根節(jié)點。一種是current.right不為空,則又重新尋找該節(jié)點的左節(jié)點??傊冀K保持著左根右的順序。

代碼

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
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容