code: def __get_descendants(node, dfs_data):
      
      list_of_descendants = []
  
      stack = deque()
  
      children_lookup = dfs_data['children_lookup']
  
      current_node = node
      children = children_lookup[current_node]
      dfs_current_node = D(current_node, dfs_data)
      for n in children:
          dfs_child = D(n, dfs_data)
          # Validate that the child node is actually a descendant and not an ancestor
          if dfs_child > dfs_current_node:
              stack.append(n)
  
      while len(stack) > 0:
          current_node = stack.pop()
          list_of_descendants.append(current_node)
          children = children_lookup[current_node]
          dfs_current_node = D(current_node, dfs_data)
          for n in children:
              dfs_child = D(n, dfs_data)
              # Validate that the child node is actually a descendant and not an ancestor
              if dfs_child > dfs_current_node:
                  stack.append(n)
  
      return list_of_descendants
docs: Gets the descendants of a node.