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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容