Я застрял в какой-то ситуации, когда мне приходится считать левый и правый дочерние элементы двоичного дерева. Моя структура базы данных соответствует приведенной ниже.
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;
Пожалуйста, не отмечайте дубликат или любой другой, если у вас нет решения
Вам нужно использовать эти 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
Других решений пока нет …