題目描述
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