code: public Map<String, ChildData> getCurrentChildren(String fullPath)
      {
          TreeNode node = find(fullPath);
          if ( node == null || node.nodeState != NodeState.LIVE )
          {
              return null;
          }
          ConcurrentMap<String, TreeNode> map = node.children;
          Map<String, ChildData> result;
          if ( map == null )
          {
              result = ImmutableMap.of();
          }
          else
          {
              ImmutableMap.Builder<String, ChildData> builder = ImmutableMap.builder();
              for ( Map.Entry<String, TreeNode> entry : map.entrySet() )
              {
                  TreeNode childNode = entry.getValue();
                  ChildData childData = childNode.childData;
                  // Double-check liveness after retreiving data.
                  if ( childData != null && childNode.nodeState == NodeState.LIVE )
                  {
                      builder.put(entry.getKey(), childData);
                  }
              }
              result = builder.build();
          }
  
          // Double-check liveness after retreiving children.
          return node.nodeState == NodeState.LIVE ? result : null;
      }
docs: Return the current set of children at the given path, mapped by child name. There are no
  guarantees of accuracy; this is merely the most recent view of the data.  If there is no
  node at this path, {@code null} is returned.
  
  @param fullPath full path to the node to check
  @return a possibly-empty list of children if the node is alive, or null