找回密码
 FreeOZ用户注册
123
返回列表 发新帖回复
楼主: 周星星1832
打印 上一主题 下一主题

[IT技术] 树的遍历, 判断子孙問題,求最有效率算法

[复制链接]
61#
 楼主| 发表于 11-6-2015 07:59:59 | 只看该作者
khing 发表于 10-6-2015 22:44
那是工作中遇到的问题啊?好高大上

如果有指向parent的指针,直接循环往回找就是了;

目前的项目确实比较难搞
涉及很多基础的涉及
其实发现知识真的是用的时候才是觉得有用的。。
回复  

使用道具 举报

62#
发表于 11-6-2015 18:41:41 | 只看该作者

我建议把查找parentId的逻辑提取出来,会更清晰一点
  1. function get_parent_id(thisId) {
  2.     var parentId = undefined;
  3.     if (parentConns = instance.getConnections({ target:[thisId], scope:["cause", "combo"] }, true)) {
  4.         parentId = parentConns[0].sourceId;
  5.     }
  6.     return parentId;
  7. }

  8. function is_child(setNewParentId, thisId) {
  9.     var parentId;
  10.     while (parentId = get_parent_id(thisId)) {
  11.         if (parentId === setNewParentId) {
  12.             return true;
  13.         } else {
  14.             thisId = parentId;
  15.         }
  16.     }
  17.     return false;
  18. }
复制代码
回复  

使用道具 举报

63#
 楼主| 发表于 11-6-2015 19:52:28 | 只看该作者
wiserfirst 发表于 11-6-2015 17:41
我建议把查找parentId的逻辑提取出来,会更清晰一点

好主意。。。。等我休假回来改代码
昨天早上系统已经go live了。。。
回复  

使用道具 举报

64#
发表于 14-6-2015 15:02:21 | 只看该作者
2的前提是child node要有指向parent的指针

1的话,如果是二叉搜索树可以做到O(log(N)),否则只能linear了

评分

参与人数 1威望 +50 收起 理由
周星星1832 + 50 你太有才了!

查看全部评分

回复  

使用道具 举报

65#
 楼主| 发表于 14-6-2015 15:36:10 | 只看该作者
clarkli 发表于 14-6-2015 14:02
2的前提是child node要有指向parent的指针

1的话,如果是二叉搜索树可以做到O(log(N)),否则只能linear ...

指针算是有
不是二叉树
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 11-2-2025 18:01 , Processed in 0.030315 second(s), 19 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表