• 技术文章 >常见问题 >Python常见问题

    python中如何遍历树

    爱喝马黛茶的安东尼爱喝马黛茶的安东尼2019-11-05 13:33:37原创2343

    各种遍历顺序如下图所示:

    6b1c633bdd48e8306ffb114c46c1f0a.png

    树的深度

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    # class TreeNode(object):

    #     def __init__(self, x):

    #         self.val = x

    #         self.left = None

    #         self.right = None

    class Solution(object):

        def maxdepth(self, root):

            if root is None:

                return 0

            return max(self.maxdepth(root.left), self.maxdepth(root.right))+1

    深度优先

    深度优先遍历有三种方式:前序遍历、中序遍历和后序遍历

    所说的前序、中序、后序,是指根节点的先后顺序。

    前序遍历:根节点 -> 左子树 -> 右子树

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    # class TreeNode(object):

    #     def __init__(self, x):

    #         self.val = x

    #         self.left = None

    #         self.right = None

    class Solution(object):

        def preorder(self, root):

            if root is None:

                return ''

            print root.val

            if root.lef:

                self.preorder(root.left)

            if root.right:

                self.preorder(root.right)

    中序遍历:左子树 -> 根节点 -> 右子树

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    # class TreeNode(object):

    #     def __init__(self, x):

    #         self.val = x

    #         self.left = None

    #         self.right = None

    class Solution(object):

        def midorder(self, root):

            if root is None:

                return ''

            if root.lef:

                self.midorder(root.left)

            print root.val

            if root.right:

                self.midorder(root.right)

    后序遍历:左子树 -> 右子树 -> 根节点

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    # class TreeNode(object):

    #     def __init__(self, x):

    #         self.val = x

    #         self.left = None

    #         self.right = None

    class Solution(object):

        def endorder(self, root):

            if root is None:

                return ''

            if root.lef:

                self.endorder(root.left)

            if root.right:

                self.endorder(root.right)

            print root.val

    广度优先

    广度优先遍历,即层次遍历,优先遍历兄弟节点

    层次遍历:根节点 -> 左节点 -> 右节点

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    # class TreeNode(object):

    #     def __init__(self, x):

    #         self.val = x

    #         self.left = None

    #         self.right = None

    class Solution(object):

      def graorder(self, root):

        if root is None:

          return ''

        queue = [root]

        while queue:

          res = []

          for item in queue:

            print item.val,

            if item.left:

              res.append(item.left)

            if item.right:

              res.apppend(item.right)

          queue = res

    比较两棵树是否相同

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    # class TreeNode(object):

    #     def __init__(self, x):

    #         self.val = x

    #         self.left = None

    #         self.right = None

    class Solution(object):

        def issame(self, root1, root2):

            if root1 is None and root2 is None:

                return True

            elif root1 and root2:

                return root1.val==root2.val and issame(root1.left, root2.left) and issame(root1.right, root2.right)

            else:

                return False

    众多python培训视频,尽在python学习网,欢迎在线学习!

    专题推荐:python 遍历 树
    上一篇:python如何输入平方根 下一篇:python和java哪个容易

    相关文章推荐

    • Python中的二叉排序树和平衡二叉树是什么

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网