[英]How to get a free slot down a binary tree using the adjacency tree method
我正在建立一個網站,要求用戶在引薦來源網站下加入。 數據的結構應該是二進制的,因此如果引薦來源人的直接下線中已有兩個子代,則必須將被引薦的新用戶放在引薦來源人的下線中的一個用戶下方,最好是第一個被引薦的用戶以防止他們直接在他們下面擁有兩個以上的用戶。 我正在用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'。 請幫忙
如果您始終希望選擇較早(最左邊)的子代,則無需遍歷這些子代,只需選擇第一個:
if(count($children) > 1)
{
$parent = $parent = $this->get_referred_by($children[0]->referral_id);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.