GetNodeRelationship – Check if two nodes are relatives

' Returns a value >0 if Node1 is a parent (or grandparent) of Node2' Returns a value <0 if Node1 is a child (or grandchild) of Node2'   in both cases the number reflects the number of levels'   between the two nodes' Returns 0 if the two Nodes are the same or'   if they belong to different subtreesFunction GetNodeRelationship(ByVal Node1 As Node, _    ByVal Node2 As Node) As Integer        If Node1 Is Node2 Then        ' this is the simplest case        Exit Function    ElseIf Len(Node1.FullPath) > Len(Node2.FullPath) Then        ' if the two nodes belong to the same subtree, then        ' Node1 is a (grand)child of Node2        If InStr(Node1.FullPath, Node2.FullPath) = 1 Then            ' do the loop only if the two nodes appear to            ' belong to the same subtree            ' check that the relationship really exists            Do Until (Node1.Parent Is Nothing)                Set Node1 = Node1.Parent                GetNodeRelationship = GetNodeRelationship + 1                If Node1 Is Node2 Then Exit Function            Loop        End If    Else        ' if the two nodes belong to the same subtree, then        ' Node1 is a (grand)parent of Node2        If InStr(Node2.FullPath, Node1.FullPath) = 1 Then            ' do the loop only if the two nodes appear to            ' belong to the same subtree            ' check that the relationship really exists            Do Until (Node2.Parent Is Nothing)                Set Node2 = Node2.Parent                GetNodeRelationship = GetNodeRelationship - 1                If Node1 Is Node2 Then Exit Function            Loop        End If    End If        ' Nodes belong to different subtrees    GetNodeRelationship = 0    End Function

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: