工作中遇到一个问题,需要用树的遍历来解决。不是二叉树,要深度优先(从最下面的叶子节点递归向上)
求各位大神帮忙

解决方案 »

  1.   

    大学的数据结构都学过吧?用递归算法伪代码大致如下:public void 深度优先遍历函数 (Node node, CallBack fun) {
      Nodes ns = node.所有子节点;
      for (Node n : ns) {
         深度优先遍历函数(n, fun);
      }
      fun(node);
    }
    注:CallBack 是遍历时需要对每个节点进行什么特殊计算或处理的回调接口函数。
      

  2.   

    弱弱问一句,那个node是根节点是吗?大学学过,不过没有好好应用。现在工作了,发现那个的重要性了
      

  3.   


    /**
    * @param PostCode
    * 根据父节点递归获取所有子节点岗位
    * @return 树的子结点集合
    */
    @SuppressWarnings("unchecked")
    public List<JobType> getPostCodeChilds(String postCode) {
    List<JobType> ret = new ArrayList<JobType>(); // 返回所有节点
    List<JobType> retRecursive = null;   
    List<JobType> children = getChildrenNodes(postCode); // 每次递归出的临时节点列表,都要加到ret中。。for(JobType job0 : children){
    String displayOrder = job0.getDisplyOrder();
      // 判断是否是最后一层节点(相当于LZ的普通记录),如果是则终止该节点下的递归
    if(!CommUtil.isNull(displayOrder) && displayOrder.equals("po")){
    ret.add(job0);
    }else{
      // 不是最后一个节点(相当于LZ普通记录),则继续递归下面的节点
    retRecursive = getPostCodeChilds(job0.getJobTypeCode());
      // 判断ret是否为0
    if(ret.size() == 0){
    ret = retRecursive;
    }else{
      // 将每次递归的加入ret
    ret.addAll(retRecursive);
    }
    }
    }
    return ret;
    }getChildrenNodes方法根据父节点查询下面子节点.