数据结构与算法
文章平均质量分 71
卷不动的程序猿
不负今日
展开
-
遍历二叉树、恢复二叉树(java代码实现)
根 左子树 右子树 根 左子树 右子树。(2)由确定的左、右子树根据前序序列分别找出左、右子树的根结点,并把左、右子树的根结点连接到父结点。(2)由确定的左、右子树根据后序序列分别找出左、右子树的根结点,并把左、右子树的根结点连接到父结点。(3)分别对左、右子树实行步骤(1)和(2),直到子树只剩下1个结点或2个结点或空为止。(3)分别对左、右子树实行步骤(1)和(2),直到子树只剩下1个结点或2个结点或空为止。(1)由后序序列获知根结点,然后根据中序序列确定左、右子树。原创 2022-10-07 03:30:00 · 648 阅读 · 1 评论 -
树、森林与二叉树之间的转换
树中结点的各子树从左到右是有次序的(不能互换)。反之为。由一个根结点及两个不相交的左、右子树组成的非空树,左、右子树又同样都是二叉树。在一棵非空的二叉树中,每个结点至多只有两棵子树(左子树、右子树),且左、右子树的次序不能任意交换。(特殊的有序树):深度为h,且有个结点的二叉树。:深度为h,有n个结点的二叉树,当且仅当每一个结点都与深度为h的满二叉树中的编号从1至n的结点一一对应时,此二叉树为完全二叉树。原创 2022-10-05 14:04:06 · 1454 阅读 · 0 评论 -
线段树Segment Tree(python代码实现)
线段树是一种二叉树(平衡二叉树),也被归类为二叉搜索树(广义上)。它是一种用于对区间修改、维护和查询的工具,可以优化时间复杂度至log级别。基本思想 把一个大区间划分为两个小区间,然后把两个小区间分别划分为两个更小的区间,不断这样划分下去,直到区间内只有一个数据为止。 每个区间存放一个或者多个数据(比如:区间的和,区间的最大值,区间的最小值),以树的形式存放这些数据,则构成了一颗二叉树。 这种存放区间数据的二叉树就是线段树。适合场景:不适合场景:线段树的维护:小区间的值更新大区间的值。线段树主原创 2022-06-21 16:07:19 · 1922 阅读 · 0 评论 -
并查集(python代码实现)
并查集是一种树型的数据结构,用于处理一些不相交集合的合并与查询问题。主要两种操作(合并和查询):实现: 一个集合构建一棵树,任选一个元素作为该集合的根节点; 建立pre数值记录每个元素的父节点,pre[当前节点]为父节点,根节点的父节点为自己本身。 给定元素关系,将一个集合的树变为另一个集合的子(将一个集合的根节点的父节点改为另一个集合的根节点),如:B的根节点等于A的根节点,这就可以将A和B两棵树合并为一棵树。 判断两个元素是否在同一个集合中: 从该原创 2022-06-10 17:26:47 · 4396 阅读 · 0 评论 -
经典排序算法——选择排序(python代码实现)
选择排序是一种十分基础的的排序算法,比较简单直观。当对数据量较少的序列实现升序或降序排序是可以采用选择排序。 从头到尾扫描所有的n个元素,从中找出最小或最大的元素并和第一个元素进行交换,然后从除第一个以外的n-1个元素中扫描,找出最小或最大的元素并和第一个(n-1个中)元素进行交换,不断迭代此操作剩下的元素,最终就是一个有序的序列。性能特点待排序列:升序排序 第一趟排序:待排序列中1为最小元素,且1本来就在最小元素位置,则不发生元素交换。第二趟排序:剩下待排序列中4为最小元素,则把4交换到最小原创 2022-06-10 10:59:06 · 5649 阅读 · 0 评论 -
经典排序算法——冒泡排序及其优化(python代码实现)
冒泡排序是排序算法中非常经典的一种交换排序算法,思想比较简单,容易理解和实现,一般是初学者最早接触的一种排序算法。 之所以称之为冒泡排序,就是因为在排序的过程中,像汽水冒泡一样,元素会逐渐一步一步的上浮到最顶端(最后)。 通过一趟趟地比较,每一趟确定一个剩余待排元素中的最大或最小元素,直到所有元素有序。具体来说,在每一趟排序中,元素两两比较,从起始位置开始,当前元素与后一个元素比较,若这两个元素符合有序,则忽略并后移一个元素继续向后比较,若不符合则先交换元素,然后后移一个元素继续原创 2022-06-04 14:17:34 · 4583 阅读 · 0 评论 -
数据结构与算法——知识点总结
本文包含数据结构与算法主要的基本知识点,便于知识的梳理和回顾。如需详细了解具体知识点请自行结合课本或者网上查阅。目录1、概述2、线性表3、栈4、队列5、串6、多维数组和广义表7、树和二叉树8、图9、查找10、排序1、概述从2、线性表3、栈4、队列5、串6、多维数组和广义表7、树和二叉树8、图9、查找10、排序...原创 2022-06-02 17:36:07 · 24244 阅读 · 7 评论 -
宽度优先遍历BFS & 深度优先遍历DFS(python代码实现)
广度优先遍历定义图举例实现方法:队列深度优先遍历定义图举例实现方法:栈python代码广度优先遍历1深度优先遍历2原创 2022-06-02 14:15:00 · 1173 阅读 · 0 评论