двоичное дерево дочерний подсчет php mysql

Я застрял в какой-то ситуации, когда мне приходится считать левый и правый дочерние элементы двоичного дерева. Моя структура базы данных соответствует приведенной ниже.

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

Где рид = идентификатор реферала И pid = идентификатор родителя,

Мне нужно подсчитать все листья данного родительского идентификатора, например

если идентификатор 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
-1

Другие решения

Других решений пока нет …