📜  树 python (1)

📅  最后修改于: 2023-12-03 14:55:38.268000             🧑  作者: Mango

树 Python

树是计算机科学中经常用到的数据结构之一。在 Python 中,我们可以使用列表、元组、字典等内置数据类型实现树的构建和遍历。

树的定义

树是由n(n>=1)个节点组成的有限集合,其中有一个特殊节点称为根节点,其余节点可以分为m(m>=0)个互不相交的集合T1、T2、……、Tm,其中每一个集合又是一棵树,称为根的子树。

二叉树

二叉树是一种特殊的树,每个节点最多只有两个子节点,分别称为左子节点和右子节点。

实现树的方式
嵌套列表

我们可以使用列表来嵌套表示一棵树,其中每个列表项存储节点和其子树,该方法实现简单,但适合较小的树。

例:

tree = ['a', 
        ['b', 
          ['d', [], []], 
          ['e', [], []]], 
        ['c', 
          ['f', [], []], 
          []]
       ]
嵌套字典

我们也可以使用嵌套字典的方式来实现树的构建,每个节点对应一个字典键值对,键表示节点名,值是一个嵌套的字典,其表示该节点的子树。

例:

tree = {'a': 
          {'b': 
             {'d': {}, 'e': {}},
           'c': 
             {'f': {}, ''}
          }
       }
树的遍历

树的遍历包括前序遍历、中序遍历和后序遍历。

前序遍历

前序遍历的顺序是先遍历根节点,再遍历左子树,最后遍历右子树。

代码实现:

def preorder_traversal(tree):
    if tree:
        print(tree[0])
        preorder_traversal(tree[1])
        preorder_traversal(tree[2])

tree = ['a', 
        ['b', 
          ['d', [], []], 
          ['e', [], []]], 
        ['c', 
          ['f', [], []], 
          []]
       ]

preorder_traversal(tree) # 输出 a b d e c f
中序遍历

中序遍历的顺序是先遍历左子树,再遍历根节点,最后遍历右子树。

代码实现:

def inorder_traversal(tree):
    if tree:
        inorder_traversal(tree[1])
        print(tree[0])
        inorder_traversal(tree[2])

tree = ['a', 
        ['b', 
          ['d', [], []], 
          ['e', [], []]], 
        ['c', 
          ['f', [], []], 
          []]
       ]

inorder_traversal(tree) # 输出 d b e a f c
后序遍历

后序遍历的顺序是先遍历左子树,再遍历右子树,最后遍历根节点。

代码实现:

def postorder_traversal(tree):
    if tree:
        postorder_traversal(tree[1])
        postorder_traversal(tree[2])
        print(tree[0])

tree = ['a', 
        ['b', 
          ['d', [], []], 
          ['e', [], []]], 
        ['c', 
          ['f', [], []], 
          []]
       ]

postorder_traversal(tree) # 输出 d e b f c a
总结

树在算法设计中有广泛的应用,Python 提供了多种数据类型来实现树的构建和遍历,我们可以选择适合自己的方式来实现。