binary tree preorder inorder postorder summary

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

你可能感兴趣的:(binary tree preorder inorder postorder summary)