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