python中的树与算法(基础篇)

树与树算法----(树的概念)

树(tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

1.树的特点

  1. 每个节点有零个或多个子节点;
  2. 没有父节点的节点称为根节点;
  3. 每一个非根节点有且只有一个父节点;
  4. 除了根节点外,每个子节点可以分为多个不相交的子树;

如下图所示,很形象的展示:
在这里插入图片描述

2.树的种类

  1. 无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也 称为自由树。
  2. 有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树。

3.常见的一些树的应用场景

1.xml,html等,那么编写这些东西的解析器的时候,不可避免用到树
2.路由协议就是使用了树的算法
3.mysql数据库索引
4.文件系统的目录结构
5.所以很多经典的AI算法其实都是树搜索,此外机器学习中的decision tree也是树结构

3.二叉树的概念

每个节点最多含有两个子树的树结构称为二叉树,它属于有序树。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)

4.二叉树的遍历

树的遍历是树的一种重要的运算。
树的两种重要的遍历模式是深度优先遍历和广度优先遍历,深度优先一般用递归,广度优先一般用队列。一般情况下能用递归实现的算法大部分也能用堆栈来实现。

4.1.深度优先遍历

对于一颗二叉树,深度优先搜索(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。
那么深度遍历有重要的三种方法。这三种方式常被用于访问树的节点,它们之间的不同在于访问每个节点的次序不同。这三种遍历分别叫做先序遍历(preorder),中序遍历(inorder)和后序遍历(postorder)。

4.2.广度优先遍历(层次遍历)

层次遍历:从树的root开始,从上到下从从左到右遍历整个树的节点

def breadth_travel(self, root):
      """利用队列实现树的层次遍历"""
    if root == None:
        return
    queue = []
    queue.append(root)
    while queue:
        node = queue.pop(0)
        print(node.elem)
        if node.lchild != None:
            queue.append(node.lchild)
        if node.rchild != None:
            queue.append(node.rchild)		
发布了38 篇原创文章 · 获赞 10 · 访问量 7185

猜你喜欢

转载自blog.csdn.net/chenxuezhong0413/article/details/100612473