类算法问题:无限级树 如何在某个结点改变状态的时候同时影响上级结点和下级所有结点
假设有一个无限级树,比如这种
标题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列表如下
目前我的做法
每一个todo的完成状态改变的时候,都递归地查找它的父结点和子结点,做上面的判断。
具体做法是:
每个结点都有一个独一无二的key,每个结点也都记录了父结点的key
当结点状态改变的时候,遍历搜索整颗树,寻找它的父节点,判断父节点的状态。父节点也同样递归地做这件事:遍历搜索整颗树,寻找祖父结点,判断状态。
同时,把这个结点的所有子节点的状态都做对应改变(比如这个结点是“完成”,那么所有子节点都是“完成”)
但是感觉代码不够优雅。
所以问题是
怎么优雅地实现?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
把key变成实例
子节点,就用递归去check
父节点,就递归往上找父的id,然后判断该父里子集的check是否全部check,然后判断父级是check还是indeterminate