求树的所有叶子结点

工作中遇到一个需求,任意给一个结点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的形式,对数组的保存也是这样。用到了递归。不过效率应该不高。

你可能感兴趣的:(求树的所有叶子结点)