2014-12-05 49 views
1

我被困在一些情况下,我必须计算二进制树的左孩子和右孩子我的数据库结构如下。二进制树儿童计数php mysql

SELECT id,usr_name,rid,pid,l_mem,r_mem,position,joining_date FROM user WHERE id = '$id'" 

其中RID是=转诊ID和PID =父ID,

我需要算定父ID的所有叶例如

如果ID 1已经离开2,右3个即时孩子的我需要知道左总成员数和总成员数。

          1 
            / \ 
            2  3 
            /\ /\ 
            4 5 6 7 
           / \  \ 
           8   9  11 
          /     \ 
          10      12 
         /\ 
         13 14 

我需要统计的1 所有孩子的我使用这个功能,但只计算最左边,请修改,或解释自己

function leftcount($id) //Function to calculate leftcount 
    { 
    $sql = "SELECT id,usr_name,rid,pid,l_mem,r_mem,position,joining_date FROM user WHERE id = '$id'"; 
    $execsql = mysql_query($sql); 
    $array = mysql_fetch_array($execsql); 
    //var_dump($array); 
    (array_count_values($array)); 
    if(!empty($array['l_mem'])) 
    { 
     $count += leftcount($array['l_mem']); 
    } 


    $totalcount = 1 + $count; 
    return $totalcount ; 

    } 

     $left = leftcount($id); 
     doing -1 because in function 1 + $count. 
     $left = $left-1; 

请不要标记复制或任何其他如果你没有解决方案

回答

-1

您需要使用这3个函数来计算任何元素的左侧右侧和所有孩子。

function leftcount($id) //Function to calculate all left children count 
{ 
    $sql = "SELECT id,usr_name,rid,pid,l_mem,r_mem,position,joining_date FROM user WHERE id = '$id'"; 
    $execsql = mysql_query($sql); 
    $array = mysql_fetch_array($execsql); 
    (array_count_values($array)); 
    $count = 0; 
    if(!empty($array['l_mem'])) 
    { 
     $count += allcount($array['l_mem']) +1; 
    } 
    return $count; 
} 
function rightcount($id) //Function to calculate all right children count 
{ 
    $sql = "SELECT id,usr_name,rid,pid,l_mem,r_mem,position,joining_date FROM user WHERE id = '$id'"; 
    $execsql = mysql_query($sql); 
    $array = mysql_fetch_array($execsql); 
    (array_count_values($array)); 
    $count = 0; 
    if(!empty($array['r_mem'])) 
    { 
     $count += allcount($array['r_mem']) +1; 
    } 
    return $count; 
} 
function allcount($id) //Function to calculate all children count 
{ 
    $sql = "SELECT id,usr_name,rid,pid,l_mem,r_mem,position,joining_date FROM user WHERE id = '$id'"; 
    $execsql = mysql_query($sql); 
    $array = mysql_fetch_array($execsql); 
    (array_count_values($array)); 
    $count = 0; 
    if(!empty($array['l_mem'])) 
    { 
     $count += allcount($array['l_mem']) +1; 
    } 
    if(!empty($array['r_mem'])) 
    { 
     $count += allcount($array['r_mem']) +1; 
    } 
    return $count; 
} 

如果您将1传递给这些函数。回答这些如下

echo leftcount(1); // 8 
echo rightcount(1); // 5 
echo allcount(1); // 13 
+0

嗨阿肖克谢谢你的回答,但出了问题! 左右计数不起作用。 – 2014-12-10 23:38:32

+0

Allcount工作正常吗?因为所有其他功能都依赖于它。 – 2014-12-11 05:26:00

+0

是的allcount工作正常。 – 2014-12-12 08:48:16