Inorder Traversal
中序遍历有两种,一种用栈辅助,一种是Morris Traversal
- Stack algorithm
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
stack, res = [], []
while root or stack:
if root:
stack.append(root)
root = root.left
else:
root = stack.pop()
res.append(root.val)
root = root.right
return res
- Morris Traversal
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
pre, cur = root, None
res = []
while pre:
cur = pre.left
if cur:
while cur.right and cur.right != pre:
cur = cur.right
if not cur.right:
cur.right = pre
pre = pre.left
continue
else:
cur.right = None
res.append(pre.val)
pre = pre.right
return res