类算法问题:无限级树 如何在某个结点改变状态的时候同时影响上级结点和下级所有结点

发布于 2022-09-11 21:39:12 字数 887 浏览 27 评论 0

假设有一个无限级树,比如这种

  • 标题1

    • 标题1-1

      • 标题1-1-1
      • 标题1-1-2
    • 标题1-2
    • 标题1-3
    • 标题1-4

如果其中一个结点状态改变,那么会影响它的所有子结点以及它的父结点、祖父结点、曾祖父结点等等
比如“标题1-1”发生改变,那么“标题1-1-1”、“标题1-1-2”、“标题1”都会有相应改变

以下开始说人话

有这么一个需求,就是一个todolist
每个todo下都可以新建任意个todo,并且可以建到任意深度
如果一个todo完成了,那么它的所有子todo都是完成状态,同时它的父结点要能够触发判断自己的所有子todo是不是都完成了,如果都完成了,那么这个父结点本身也要显示为完成状态,同时要继续触发祖父结点做这个检查

范例todo列表如下

clipboard.png

目前我的做法

每一个todo的完成状态改变的时候,都递归地查找它的父结点和子结点,做上面的判断。
具体做法是:
每个结点都有一个独一无二的key,每个结点也都记录了父结点的key
当结点状态改变的时候,遍历搜索整颗树,寻找它的父节点,判断父节点的状态。父节点也同样递归地做这件事:遍历搜索整颗树,寻找祖父结点,判断状态。
同时,把这个结点的所有子节点的状态都做对应改变(比如这个结点是“完成”,那么所有子节点都是“完成”)

但是感觉代码不够优雅。

所以问题是

怎么优雅地实现?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

已下线请稍等 2022-09-18 21:39:12

把key变成实例

败给现实 2022-09-18 21:39:12

子节点,就用递归去check
父节点,就递归往上找父的id,然后判断该父里子集的check是否全部check,然后判断父级是check还是indeterminate

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文