post order
post order is reverse of pre order, when appending value, simply add it to the front of the result list instead of the end.
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res=[]
stack=[root]
while stack:
node=stack.pop()
if node:
res.insert(0,node.val)
stack.append(node.left)
stack.append(node.right)
return res
in order
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res=[]
stack=[]
cur=root
while stack or cur:
#add all possible left node into the stack
while cur:
stack.append(cur)
cur=cur.left
#start adding to result from the left most node
cur=stack.pop()
res.append(cur.val)
#after reading the root node, start reading the right subtree
cur=cur.right
return res
pre order
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
#use the LIFO feature of stack,
#if the node is not empty, output the value, then first put right node into stack, then put left node into stack
#next loop will read the left node first, after finish interating the left node, it will pop the right node and iterate the right node.
res=[]
stack=[root]
while stack:
node=stack.pop()
if node:
res.append(node.val)
stack.append(node.right)
stack.append(node.left)
return res