欢迎光临散文网 会员登陆 & 注册

获取文件夹下所有内容无重复的文件数量

2023-06-28 00:25 作者:闷骚的寡王  | 我要投稿

用红黑树写一个字符串集合保存文件名字,每个文件名字节点都包含一个文件夹栈或者说队列,遍历文件夹下所有文件时每找到一个文件就把文件的名字插入字符串集合中,如果该名字已经存在于字符串集合则遍历该名字的所有具体路径,对找到的每一个文件进行比对,看看新插入的文件是否与已经存在的文件内容重复了,不重复就将这个新的文件夹路径插入此节点对应的文件夹栈并且文件数量加一,否则文件数量不变。

用红黑树实现字符串集合需要知道字典序的概念,也就是用字符串间第一个不同字符的大小决定字符串的次序,小的在前大的在后,若长短不一致且短字符串与长字符串对应区域的字典序相同,则短字符串的字典序在前,长字符串的字典序在后。红黑树是一种从根节点到叶子结点的黑色节点总数是一个相同的值的数据结构,这里只需要实现红黑树的插入功能就行了,也就是维持黑色节点总数相等。

需要的数据有:子节点、父节点、爷爷节点、叔叔节点,曾爷爷节点,曾曾曾爷爷节点。

算法步骤如下:

①父子节点是否都是红色节点,是进入'②',否则进入'⑥'。

②令父节点变为黑色节点,爷爷节点变为红色节点,若叔叔节点不存在或叔叔节点为黑色转'③',叔叔节点为红色转'④'。

③进行二叉树旋转,假如父节点是左节点令爷爷节点的左节点变为父节点的右节点,父节点的右节点变为爷爷节点,曾爷爷节点对应的爷爷节点变为父节点,假如父节点是右节点令爷爷节点的右节点变为父节点的左节点,父节点的左节点变为爷爷节点,曾爷爷节点对应的爷爷节点变为父节点,旋转后进入'⑥'。

④令叔叔节点变为黑色,此时爷爷节点是红色,令子节点为爷爷节点,父节点为曾爷爷节点爷爷节点为曾曾爷爷节点,转'①'。

⑥设置根节点为黑色

省略了很多细节,以下是代码实现

红黑树的实现还是相当复杂的,我也是第一次自己撸出来,对红黑树的理解还比较片面,希望有大佬能不吝赐教。

获取文件夹下所有内容无重复的文件数量的评论 (共 条)

分享到微博请遵守国家法律