Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.
Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin. Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

Daraxt bolalari sonini topish algoritmi

+2 ovoz
217 marta ko‘rilgan
so‘radi 30 sentabr, 17 Farhodjon (1,192 bal)
teglar o‘zgartirildi 10 oktabr, 17 vejon

Assalomu alaykum. Menda: 

                              1
                            /   \
                           2     3
                          / \   / \
                         4   5 6   7

Shunaqa daraxt mavjud. Men shu daraxtni har bir elementini bolalari sonini

olishim kerak. Masalan 1 uchun 6 ta, 2 va 3 uchun 2 tadan 4, 5, 6, 7 uchun

0 ta. Shu algoritmni qanday tuzsam bo'ladi. Yordam uchun rahmat!

3 Javoblar

+1 ovoz
javob berdi 02 oktabr, 17 Farhodjon (1,192 bal)
tanlangan 05 oktabr, 17 Farhodjon
 
Eng yaxshi javob

Rekursiv funksiyadan foydalandim. va ishladi. Mana kodlari:

public function getArticleCount($id)
{
    $parent = self::findOne(['id' => $id]);
    $this->account($parent);
    return $this->counter;
}

public function account($parent)
{
    $this->counter = $this->counter + count(ForumThemes::findAll(['section_id' => $parent->id]));
    $childs = self::findAll(['parent_id' => $parent->id]);

    foreach ($childs as $child)
        $this->account($child);

    return $this->counter;
}
izoh qoldirdi 02 oktabr, 17 Farhodjon (1,192 bal)
bu yerda $this->counter class boshida elon qilib olganman
+1 ovoz
javob berdi 05 oktabr, 17 Muxiddin (180 bal)
Tablitsani strukturasini togori tuzsangiz sizga bu juda oson boladi

1. users - barcha odamlarni royxati

2.user_children - bu qaysidir user boglangan barcha children, betta

owner_id - user ga boglanadi

user_id - userga boglanadi

depth - nechinchi qadamda boglanganligi
masalan 1- uchun

owner_id     user_id     depth

1                     2            1

1                     3           1

1                     4          2

...................

shunaqa bolsa hohlagan userni childlarni bitta zaprosda count qilib olsangiz boladi
0 ovoz
javob berdi 30 sentabr, 17 parmonov98 (1,684 bal)

daraxt massivini o'qishda, metkalar qo'yib ketish orqali hisoblash mumkin:

1.tree-items bu masssiv siklga kirishdan oldin e'lon qilinadi

2.elementlar sonini hisoblash uchun counter har bir siklda bittaga oshiriladi  (agar array bo'lsa aynan o'sha elementni hisoblash uchun recursive func siyani qayta chaqiriladi)

3.harbitta element va subelementlarni oxirgisini o'qib tugatganligini if bilan tekshirib true da quyidagini:  tree-items[i]['elements'] = counter,     aks holda continue qilamiz.

juda maydalab yozmadim.umid qilaman tushunarli bo'ladi

Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.

Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin.

Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

Telegram kanal YordamUzRss

...