键树的应用

在开发windows域同步工具遇到了很棘手的问题,LDAP协议返回的值是这样的,

举例: vall="小明a",OU="一班",OU="一年级"

          val2="小明b",OU="一班",OU="二年级"

我们假设同一个班级或年级下不可能出现重名的情况,windows域也确实是这样,那么假设我们只知道小明b是一班的同学,那么如何知道他是一年级还是二年级的同学呢?如何建立这样的数据结构标识所有的同学,班,年级.以便于在将来进行查找,我们很直接的

想到了用一棵树来表示这种关系.如下图

                                                                    北京试验小学(Root)

                                                                              |

                                                                     /                /

                                                             一年级           二年级

                                                                |                          |

                                                          小明a                    小明b

这棵树的结构就是这个样子的.

现在我们应用这棵树,如果我们把上面的关系表示成一个字符串,比如{北京试验小学,二年级,一班,小明b}这个集合可以确定小明b所在的唯一一条路径,那么用在域同步问题上就非常方便了,比如我们查找小明b是否存在,算法应该这样,广度优先,从Root开始,查找其子树根节点,如果存在二年级则继续查找其子树节点,因为同一个节点下不会有重名的情况,所以我们只要沿着这条路径走下去就是正确的,如果遍历到叶子节点发现了小明b则说明我们找到他了,否则则反之.这说明实际上我们之前建立的就是一棵键树,而它的应用就是从根到叶子节点唯一确定一个字符串,这个字符串代表着域里面的一个单位,也就是说它一定是关键字.从而很好的解决了开始我们提到的名字相同的问题

                                                

你可能感兴趣的:(数据结构,算法,windows,工具)