robbaa 最近的时间轴更新
robbaa

robbaa

V2EX 第 594402 号会员,加入于 2022-09-15 13:13:39 +08:00
今日活跃度排名 7634
robbaa 最近回复了
7 天前
回复了 xieyuheng 创建的主题 Linux 请问 debian 和 ubuntu 之间怎么做选择?
服务器省资源用 debian ,能用 docker 用 docker 。
开发办公 ubuntu 足够,我就每两年装一次系统。
23 天前
回复了 imklay 创建的主题 生活 中元节鬼故事播客推荐,不限平台
中元节产品发布上线
122 天前
回复了 aqiu111 创建的主题 程序员 Java 开发有必要使用 Linux 系统吗
纯开发选啥平台都行,区别不大。

关于 Linux 的学习,可以尝试弄个 vps 搭个站,这个更有实践性。
ssh 、vi 、apt/yum 、ps 、top 、nginx 、docker 这些都是经常用到的。
能写单元测试写单元测试;
写不了细的,就当 api 测试写。
方案二:
基于方案一改良,把 left 和 right 的值换成 float 或 double ,不再递增只保证数值增加的。
新增元素,用两侧兄弟元素 right(leftNodeRight)与 left(rightNodeLeft)的值去计算新节点的 left 、right 。
left=(rightNodeLeft-leftNodeRight)/4+leftNodeRight
right=rightNodeLeft - (rightNodeLeft-leftNodeRight)/4

计算公式不一定,只要能保证有“足够空间”都可以,定时做好“空间”回收就行。
大致如下:
root: 0,25
node2_1:1,18
node3_1:2,3
node3_2:4,15
node4_1:5,8
node5_1:6,7
ndoe4_2:9,14
node5_2:10,11
node5_3:12,13
node3_3:16,17
node2_2:19,22
node3_4:20,21
node2_3:23,24

需求 1:查询某节点下所有节点
select * from nodes where left > {left} and right < {right}

需求 2:查询某元素上级节点
select * from nodes where left < {left} and right > {right} order by left ASC

缺陷代价:
元素的添加与删除,都会导致大量 left 、right 值的更新。
其实,主要是无限层级遍历问题。
分享 2 个方案,一个是看来的,另外一个算是改进,好不好不好说。

方案一:
每个节点 4 个属性:
id:编号
name:名称
parent:父节点编号
left:左子节点排序编号
right:右边子节点排序编号

1. 先构建树
2. 然后按照,先序遍历对每个节点的 left 、right 设值,每次加 1.
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2754 人在线   最高记录 5930   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 15ms · UTC 14:16 · PVG 22:16 · LAX 07:16 · JFK 10:16
Developed with CodeLauncher
♥ Do have faith in what you're doing.