如何使用邻接树方法在二叉树上获得空闲插槽

时间:2018-07-09 14:00:05

标签: php mysql codeigniter

我正在建立一个网站,要求用户在引荐来源网站下加入。数据的结构应该是二进制的,因此如果引荐来源人的直接下线中已有两个子代,则必须将被引荐的新用户放到引荐来源人的下线中的一个用户下方,最好是第一个被引荐的用户以防止他们直接在他们下面拥有两个以上的用户。我正在用codeigniter构建这个系统,我的代码是这样的

public function get_referred_by($refer_id)
{
    $where = array('referral_id' => $refer_id);
    $parent = $this->get_by($where, true);
    $children = $this->db->select('referral_id')
                ->where('refer_id', $parent->referral_id)
                ->order_by('users.id desc')
                ->limit('2')
                ->get('users')->result();
    if(count($children) > 1)
    {
        for($i = 0; $i<count($children); $i++) 
        {
            $parent = $this->get_referred_by($children[$i]->referral_id);
        }
    }       
    return $parent; 
}

问题在于,使用该代码,我可以跳过下线以找到下一个空闲的插槽,但是不必先跨下线检查下一个用户是否有空闲插槽,而是将系统卡在一个上树。例如, 用户A加入用户B和C, 然后B加入D和E, 我想要的是使用用户A'的引用ID而不是返回用户Ds的引用号,而是返回用户Cs'。请帮助

1 个答案:

答案 0 :(得分:0)

如果您始终希望选择较早(最左边)的孩子,则无需遍历这些孩子,只需选择第一个孩子即可:

if(count($children) > 1)
{
    $parent = $parent = $this->get_referred_by($children[0]->referral_id);
}