求树的所有叶子结点

工作中遇到一个需求,任意给一个结点id,求出其所有的叶子结点。

    /**
     * 求出单个结点下面所有叶子结点,并加入到变量中
     * @param $id 结点id
     * @param $data 从数据库查找出来的school_area的数据
     */
    public function findLastNodes($id, $data)
    {
        if ($this->childCounts($id, $data) == 0) {
            array_push($this->nodes, $id);
        } else {
            foreach ($data as $key => $value) {
                if ($value['parent_id'] == $id) {
                    $this->findLastNodes($value['id'], $data);
                }
            }
        }
    }
    
    /**
     * @param $id 结点id
     * @param $data school_area里取出来的数据
     * @return int 该结点下子结点的个数
     */
    public function childCounts($id, $data)
    {
        $i = 0;
        foreach ($data as $key => $value) {
            if ($value['parent_id'] == $id) {
                ++$i;
            }
        }
        return $i;
    }

上面的方法在一个TP类中,所以调用方法就直接用$this->funcion name的形式,对数组的保存也是这样。用到了递归。不过效率应该不高。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,726评论 0 11
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,740评论 18 399
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,290评论 0 25
  • 本是春花烂漫时, 蜂忙雀走更逍遥。 纵使天公连夜雨, 一枝桃红向她笑。
    小愁阅读 226评论 0 0
  • 由于回老家办事情,只得继续暂停。当然更多的是乡村生活体会。When A jar containing firefl...
    晗星阅读 312评论 0 0