/**
   * childPathList里面的每个元素为一个Stack<Integer>,栈顶存放了路径的起始节点,栈底则 存放了终止节点, 该方法用于getPaths(catId)之中
   *
   * @param childPathList
   */
  private List<Stack<Integer>> walkUp(List<Stack<Integer>> childPathList) {
    List<Stack<Integer>> results = new LinkedList<>();
    for (Stack<Integer> subPath : childPathList) {
      int currentId = subPath.peek();
      int depth = getDepth(currentId);

      if (depth <= 1) {
        results.add(subPath);
      } else {
        Set<Integer> parentIds = getParentIds(currentId);
        for (int parentId : parentIds) {
          Stack<Integer> path = (Stack<Integer>) subPath.clone();
          path.push(parentId);
          results.add(path);
        }
      }
    }

    return results;
  }