• Python:树的遍历


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

    树的最大深度 

    # 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

    深度优先

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

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

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

    # 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)

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

    # 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)

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

    # 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

     广度优先

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

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

    # 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

    比较两棵树是否相同

    # 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
  • 相关阅读:
    程序的了解
    Oracle VM VirtualBox虚拟网卡消失解决方法
    YARN 运维、巡检、监控、调优、排障
    HDFS巡检、监控、调优、排障
    Windows CMD命令大全
    [HDU]6356 Glad You Came(ST表)
    [BZOJ] 1019 [SHOI2008]汉诺塔
    树上叶子之间点对距离平方和
    [BZOJ]1026[SCOI2009]windy数
    [计蒜客]A1542 The Maximum Unreachable Node Set
  • 原文地址:https://www.cnblogs.com/delav/p/9693820.html
Copyright © 2020-2023  润新知