美文网首页
二叉树前中后层序遍历的Python实现

二叉树前中后层序遍历的Python实现

作者: 李白开水 | 来源:发表于2019-10-26 09:26 被阅读0次

    田田田

    image.png
    • 前序遍历
    class TreeNode(object):
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None
    
    
    class Solution(object):
        def pre_order(self, root):
            res = []
            if root:
                res.append(root.val)
                res += self.pre_order(root.left)
                res += self.pre_order(root.right)
            return res
    
    
    def main():
        list1 = [1, None, 2, 3]
        root = TreeNode(list1[0])
        p1 = TreeNode(list1[1])
        p2 = TreeNode(list1[2])
        p3 = TreeNode(list1[3])
        root.left = p1
        root.right = p2
        p2.left = p3
        p = Solution()
        pre_order_list = p.pre_order(root)
        print pre_order_list
    
    
    if __name__ == '__main__':
        main()
    
    
    • 中序遍历
    class TreeNode(object):
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None
    
    
    class Solution(object):
        def in_order(self, root):
            res = []
            if root:
                res += self.in_order(root.left)
                res.append(root.val)
                res += self.in_order(root.right)
            return res
    
    
    def main():
        list1 = [1, None, 2, 3]
        root = TreeNode(list1[0])
        p1 = TreeNode(list1[1])
        p2 = TreeNode(list1[2])
        p3 = TreeNode(list1[3])
        root.left = p1
        root.right = p2
        p2.left = p3
        p = Solution()
        in_order_list = p.in_order(root)
        print in_order_list
    
    
    if __name__ == '__main__':
        main()
    
    • 后续遍历
    class TreeNode(object):
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None
    
    
    class Solution(object):
        def post_order(self, root):
            res = []
            if root:
                res += self.post_order(root.left)
                res += self.post_order(root.right)
                res.append(root.val)
            return res
    
    
    def main():
        list1 = [1, None, 2, 3]
        root = TreeNode(list1[0])
        p1 = TreeNode(list1[1])
        p2 = TreeNode(list1[2])
        p3 = TreeNode(list1[3])
        root.left = p1
        root.right = p2
        p2.left = p3
        p = Solution()
        post_order_list = p.post_order(root)
        print post_order_list
    
    
    if __name__ == '__main__':
        main()
    
    
    • 层序遍历
    image.png
    • 代码1:
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    class TreeNode(object):
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None
    
    
    class Solution(object):
        def Sequence_order(self, root):
            res = []
            if root:
                if root.left:
                    res.append(root.left.val)
                if root.right:
                    res.append(root.right.val)
                res += self.Sequence_order(root.left)
                res += self.Sequence_order(root.right)
            return res
    
    
    def main():
        list1 = [1, 2, 3, 4, 5, 6, 7]
        root = TreeNode(list1[0])
        p1 = TreeNode(list1[1])
        p2 = TreeNode(list1[2])
        p3 = TreeNode(list1[3])
        p4 = TreeNode(list1[4])
        p5 = TreeNode(list1[5])
        p6 = TreeNode(list1[6])
        root.left = p1
        root.right = p2
        p1.left = p3
        p1.right = p4
        p2.left = p5
        p2.right = p6
        p = Solution()
        Sequence_order_list = p.Sequence_order(root)
    
        res = []
        res.append(root.val)    #根节点单独拿出来了
    
        for i in Sequence_order_list:
            res.append(i)
        print res
    
    
    if __name__ == '__main__':
        main()
    
    • 代码2:
    from Queue import Queue
    
    
    class TreeNode(object):
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None
    
    
    class Solution(object):
        def sequence_order(self, root):
            res = []
            q = Queue(maxsize=0)
    
            if root == None:
                return None
    
            q.put(root)
            res.append(root.val)
    
            while not q.empty():
                first = q.get()
                if first.left:
                    q.put(first.left)
                    res.append(first.left.val)
    
                if first.right:
                    q.put(first.right)
                    res.append(first.right.val)
    
            return res
    
    
    def main():
        list1 = [1, 2, 3, 4, 5, 6, 7]
        root = TreeNode(list1[0])
        p1 = TreeNode(list1[1])
        p2 = TreeNode(list1[2])
        p3 = TreeNode(list1[3])
        p4 = TreeNode(list1[4])
        p5 = TreeNode(list1[5])
        p6 = TreeNode(list1[6])
        root.left = p1
        root.right = p2
        p1.left = p3
        p1.right = p4
        p2.left = p5
        p2.right = p6
    
        p = Solution()
        sequence_order_list = p.sequence_order(root)
        print sequence_order_list
    
    
    if __name__ == '__main__':
        main()
    

    相关文章

      网友评论

          本文标题:二叉树前中后层序遍历的Python实现

          本文链接:https://www.haomeiwen.com/subject/ibbjvctx.html