请教一个树比对的算法

2022-03-23 22:11:38 +08:00
 waiaan

左边是树,右边是树形表格,右边的表格展示左边树的勾选项,表格每行的顺序都是可以在本层级进行调整,不一定按左边树的顺序,新勾选的直接插入本层级的末尾,取消勾选的要从表格中删除。

不知道表达清楚没有,目前的做法是构建每个树节点的节点路径数组,然后遍历数组一层一层往里算。

求更好的方法,谢谢。

988 次点击
所在节点    算法
5 条回复
sillydaddy
2022-03-25 09:21:59 +08:00
大家都没有回复,应该是没看懂你的表述。。
waiaan
2022-03-25 10:19:41 +08:00
@sillydaddy
就是勾选左边的节点,把这个节点插入到右边的表格对应层级的位置,取消勾选则要从表格中删除。
sillydaddy
2022-03-25 13:03:49 +08:00
不知道你用的什么界面库构造的表格,我能想到的比「遍历数组一层一层往里算」稍微好点的办法是,用 map 或者 dictionary ,根据待操作节点的父节点 id ,找到这个父节点在表格中对应的那行,然后执行添加或者删除操作。能这样做的前提还得是,能用 map 或 dictionary 保存表格的各行。
我感觉节点路径数组也不错啊,react-sortable-tree 就是用的节点路径数组。标题「树比对的算法」跟这个也差太多了吧。
waiaan
2022-03-25 13:39:12 +08:00
@sillydaddy
感谢。
两边的数据结构都是这种树形结构
```js
[{
id: 1,
label: '一级 1',
children: [{
id: 4,
label: '二级 1-1',
children: [{
id: 9,
label: '三级 1-1-1'
}, {
id: 10,
label: '三级 1-1-2'
}]
}]
}]
```
差不多就是树比对的意思,右边的项与左边勾选的项进行比较,多的删除,少的添加。
Gav1nw
2022-04-04 04:31:58 +08:00
在我印象里,树的便利,用递归实现效果更好吧?我能想到是递归+NLR 算法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/842472

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX