Тёмный

КАК РАБОТАЮТ ДЕРЕВЬЯ | СТРУКТУРЫ ДАННЫХ 

Alek OS
Подписаться 242 тыс.
Просмотров 146 тыс.
50% 1

clck.ru/33qcFE - развивайте навыки в работе с данными на курсах от Яндекс Практикума
Создавай будущее вместе с Тинькофф - l.tinkoff.ru/alekosmarch/?Ldt...
КАК РАБОТАЮТ ДЕРЕВЬЯ | СТРУКТУРЫ ДАННЫХ
Подписывайся в соц. сетях:
Телеграм - t.me/Alek_OS
ВК - alekos1
❤️ Поддержка канала:
Бусти - boosty.to/alekos
Юмани - yoomoney.ru/to/410011179144828
✔️ Полезные ссылки:
Основы программирования - • КАК РАБОТАЕТ ПАМЯТЬ КО...
Полезно знать - • ЯЗЫКИ ПРОГРАММИРОВАНИЯ...
Алгоритмы и структуры данных - • УСКОРЬ СВОЙ КОД В МИЛЛ...
Мысли Алека - • КАК ИЗУЧАТЬ ПРОГРАММИР...
00:00 Введение
01:37 Яндекс Практикум
03:18 Двоичное дерево поиска
03:58 Двоичное дерево - вставка, поиск
05:45 Двоичное дерево - удаление
07:14 Обходы дерева
08:15 Работа в Тинькофф
09:49 АВЛ-дерево - вставка
16:08 АВЛ-дерево - удаление
16:44 Красно-чёрное дерево - вставка
20:34 Красно-чёрное дерево - удаление

Опубликовано:

 

14 май 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 197   
@AlekOS
@AlekOS Год назад
Подписывайся в телеграм-канал: t.me/Alek_OS
@dmbabaycev123
@dmbabaycev123 Год назад
Начался список с 1, не с 0
@dmbabaycev123
@dmbabaycev123 Год назад
За это лайк)
@Cheeckoff
@Cheeckoff Год назад
- Что делаешь? - Перекрашиваю чёрных детей. - Расист?! - Программист.
@bartbelrigvardo5216
@bartbelrigvardo5216 Год назад
🤣🤣🤣 Это за гранью добра и зла
@abuser-je3gl4vc1c
@abuser-je3gl4vc1c 4 месяца назад
- Что делаешь? - Делаю деда красным и совершаю левый поворот. - Коммунист?! - Программист.
@user-jx8pe4yz6q
@user-jx8pe4yz6q Год назад
Не расстраивайтесь если не поняли ролик. Никто никогда его не поймет с первого раза. Такие ролики лучше воспринимать не как обучающие а как справочные.
@user-eb9cv3wx8b
@user-eb9cv3wx8b 8 месяцев назад
я с первого раза все понял, а ты лох ))))))))))))
@user-ud1fw5zc8i
@user-ud1fw5zc8i 4 месяца назад
По фактам
@user-yd9xy3rb4x
@user-yd9xy3rb4x Месяц назад
Я понял с первого раза ролик. Даже слишком простой, сеньор ios, магистк комтерных наук
@user-yj2cq4fm7z
@user-yj2cq4fm7z 7 дней назад
@@user-yd9xy3rb4x держи в курсе
@xagent
@xagent Год назад
Недавно наткнулся на ваш канал. Это просто супер. На фоне всего остального шлака по теме it, который существует на ютубе, ваш канал прям выделяется. Мне очень нравится ваш фундаментальный подход. Не тупо освоить синтаксис какого нибудь языка программирования, а дать именно теоретические основы программной инженерии. Да еще и в интерактивном и наглядном формате, с анимациями, графиками. Желаю развития каналу.
@DemetriuszStrykowski
@DemetriuszStrykowski Год назад
Точно, канал просто супер!!!
@viska_tru
@viska_tru Год назад
Сложно, ничего непонятно, но очень интересно
@whitefox1777
@whitefox1777 Год назад
Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?
@BigRock379
@BigRock379 8 месяцев назад
Алекс, спасибо тебе! Мне безумно заходить этот контент, я под него стараюсь расслабляться и при этом продолжать вникать во все тонкости программирования, с такой визуализацией и музыкальным сопровождением уносит в транс порой..
@user-ot5iy5es4l
@user-ot5iy5es4l Год назад
Вот так если задуматься, какую же титаническую работу автор воплотил, написать грамотно текст, визуализировать все сказанное…лайк!
@p.al.trofimov
@p.al.trofimov Год назад
Лучший из всех каналов на рунете по IT тематике. Спасибо за контент, за качественную информацию и высокий уровень подготовки ролика 👍
@user-ov1xr1ip7i
@user-ov1xr1ip7i Год назад
Недавно сам писал реализацию красно-черного дерева, столько статей пересмотрел и видосов,эх,где ты был пару недель назад( Все очень классно и понятно!
@Dmitrii-Zhinzhilov
@Dmitrii-Zhinzhilov 7 месяцев назад
Alek, благодарю!! 👍 Инфографика великолепна! 🔥
@alekseykhromov259
@alekseykhromov259 Год назад
Какой же годный контент… Большое спасибо!!!
@pashkiewich
@pashkiewich Год назад
Как всегда кратко и информативно. Спасибо за пищу для мозга )
@MicP8
@MicP8 Год назад
7:10 - если при удалении узла, с двумя детьми, мы используем максимальный элемент слева(maxInLeft), то и удалять надо слева : node.left = delete(node.left, maxInLeft.key). На слайдах : node.right = delete(node.right, maxInLeft.key). Аналогичная неточность в коде для AVL Tree
@user-ul9hq7xm2q
@user-ul9hq7xm2q 2 месяца назад
Верно. Хорошее замечание
@arswarog
@arswarog Год назад
круто, так быстро и подробно про деревья я еще не видел материала
@sashakuznechkin
@sashakuznechkin Год назад
Спасибо за видео!!!
@cepmadbrozzer4448
@cepmadbrozzer4448 Год назад
Не стоило ли указать, что видео исключительно про бинарные деревья? А то складывается ощущение, что других и не существует. Я, к примеру, всё ждал, каким будет разбор B+Tree, чтобы в очередной итерации попробовать снова обуздать принцип работы InnoDB. Но видео очень залипательное, спасибо! Очень низкоуровнево, прям как я люблю.
@alexshturmovik3037
@alexshturmovik3037 Год назад
согласен, эту структуру данных как-то обходят стороной, иногда даже BTree расшифровывают как Binary Tree(
@DenysHolovin
@DenysHolovin 9 месяцев назад
Очень низкоуровнево, прям как я не люблю :) Но было интересно
@rechw769
@rechw769 Год назад
как вовремя! как раз разбирался с ними! спасибо!
@user-fy3iv9dp7g
@user-fy3iv9dp7g Год назад
Спасибо за видео. Лайк👍
@user-jg7ly1ib2z
@user-jg7ly1ib2z Год назад
Очень качественный контент, спасибо
@matweyrybakovskiy2952
@matweyrybakovskiy2952 Год назад
Отличный контент! Спасибо!
@andarworld8985
@andarworld8985 Год назад
Спасибо за видеоролик!
@user-ll7mx9mn8z
@user-ll7mx9mn8z Год назад
Спасибо за очередное годное видео
@leomysky
@leomysky 11 месяцев назад
Спасибо за видео Очень круто и фундаментально
@nikolaiandrianov1856
@nikolaiandrianov1856 Год назад
Прекрасно!!!
@ghjklfghk
@ghjklfghk Год назад
О. Новенький видосик. Усваиваем
@aidamur
@aidamur Год назад
огромное спасибо за видео
@laranMQR
@laranMQR Год назад
Алекс, привет. Мне кажется, что на 7:05 также нужно и слева искать значение ключа заменяющего узла, чтобы его удалить. Т.е. просто нужно добавить node.left = delete(node.left, maxInLeft.key); . Переписал твой код и попробовал на датасете от 5 до 11 удалить вершину 8, то с кодом из примера 7 станет вершиной и также останется лепестком, поэтому нужно и для левой части делать проверку (удаление).
@zadrot64
@zadrot64 Год назад
Сними ролик про B-trees плз) Нормального ролика найти не могу, а они чаще используются для баз данных....
@Mercowod
@Mercowod 9 месяцев назад
Спасибо 👍
@ruslandad365
@ruslandad365 Год назад
Кончаю от твоего "Окей" 😁😁😁
@bOOOOkash
@bOOOOkash Год назад
Лайк не глядя, а потом уже просматриваем в высоком качестве и без перемотки 🌚
@prokaza97
@prokaza97 6 месяцев назад
Мозг расплавится понять это с первого раза. Автору респект, что не только вник и разобрался, но и иллюстрировал и разжевал. Но осознать это всё очень сложно. Только базовые идеи
@vladimirzabaro6795
@vladimirzabaro6795 Год назад
Автор ты просто МегаМен. 👌👍 спасибо
@aleksandrk.5818
@aleksandrk.5818 Год назад
Хорош комменты сыпать) лайки ставьте)
@senkamatic8448
@senkamatic8448 Год назад
Да поставили уже ))))
@djorjegolmud517
@djorjegolmud517 5 месяцев назад
Лучший просто!
@ron8897
@ron8897 5 месяцев назад
Спасибо тебе за помощь
@BeketChan
@BeketChan Год назад
видео с удовольствием .... посмотрел.
@d1merz
@d1merz Год назад
Капитальный красавчик !
@jamessmit9738
@jamessmit9738 Год назад
Спасибо конечно огромное, но контрольная по этой теме была на прошлой неделе
@vadimmatskevich8439
@vadimmatskevich8439 Год назад
Благодарю за разбор красно-черного дерева Давно когда-то видел его разбор текстовый - не стал вьезжать и забил. STL на красно-черных - но кодировать их явно сложнее АВЛ и высота дерева в среднем на 25+% выше чем у АВЛ Так что друг друга они заменить и вправду не могут.
@user-bw1fh9pd3i
@user-bw1fh9pd3i Год назад
Cпасибо, посмотрим
@MicP8
@MicP8 Год назад
Отличный разбор! В коде copyTree (8:00)на экране есть ошибка, должно быть, как и сказано в звуковом комментарии: void copyTree(Node node) { If(node==null) return; print(node.value); copyTree(node.left); copyTree(node.right); }
@yuriykachanov2212
@yuriykachanov2212 7 месяцев назад
In English: pre-order, in-order, post-order
@user-gv9dg4ni5g
@user-gv9dg4ni5g 5 месяцев назад
Жёсткий контент. Примеров только бы побольше
@bOOOOkash
@bOOOOkash Год назад
Посмотрев данный ролик, я понимаю - какой же я тупой... Спасибо за ролик.
@eugenevolohonsky1469
@eugenevolohonsky1469 Год назад
Самое крутое объяснение работы деревьев
@user-ij9vb6wn1z
@user-ij9vb6wn1z Год назад
Интересно, круто рассказываешь, но пока тяжело. Вернусь через месяц
@avi-crakhome2524
@avi-crakhome2524 Год назад
Деревья придумали для обычных процессоров, которые способны выполнять одно сравнение за одну команду. Ускорители для ИИ работают иначе - там вся память ассоциативная, и поиск заключается в нахождении самого близкого значения от запроса, в идеале равным запросу. Но так как от двоичной логики далеко уйти не получилось - то поиск выполняется параллельным приближением, прямо в памяти. Берётся блок памяти допустим 4к цифр, и каждую цифру сравнивают с запросом, все разом, параллельно. Результатом имеем новый слой данных x>y?x-y:y-x. Если на этом слое где-то получился ноль - поиск заканчивается. Иначе выполняется операция сравнения между двумя соседями, и образуется новый слой - куда помещаются только малые числа. Потом ещё и ещё слои, до самого минимального числа. Адрес минимального числа считается результатом поиска, и он может быть не точным. И ещё пока нижний слой выполняется - верхний может принять новую страницу памяти и новый поиск. Для всего этого требуется огромное количество транзисторов - но зато скорость поиска приближается к реализациям квантовых компов. Которые кстати работают примерно так-же.
@asjvchnvh9313
@asjvchnvh9313 3 месяца назад
Интересная инфа, что за тема? Хотел почитать статьи
@user-sf5zv4jc5v
@user-sf5zv4jc5v Год назад
Подсказка, по поводу того, чтобы понять почему КЧД балансируется, узнайте что такое 2-3 дерево, частный случай n-дерева. Когда вы поймете, 2-3 дерево, тогда вы поймет что кчд - это и есть 2-3 дерево, просто для обозначения левого и правого элемента, нам понадобилось красить узлы бинарного дерева.
@glebbondarenko67
@glebbondarenko67 Год назад
Спасибо за видео. Что-то код "Прямого обхода" совпадает с кодом "Обратно подхода". Или я чего-то непонял?
@where631
@where631 Год назад
Real good stuff
@alexeyfladarov5200
@alexeyfladarov5200 Год назад
Годнота
@user-lp3ke5bg2u
@user-lp3ke5bg2u Год назад
Это класс, это здорово! Ну а компиляторы, теперь, как работают?
@atmiccmx
@atmiccmx Год назад
да ладно, чувакккк, обожаю
@geekdev0
@geekdev0 Год назад
Не глядя лайк ❤
@user-ow6dr9ok6c
@user-ow6dr9ok6c Год назад
Не слушая, тоже затычковал
@OpenFrimeTVcom
@OpenFrimeTVcom Год назад
еще было б очень интересно посмотреть ролик про файловые системы. К примеру фат32. Как оно все устроено, где хранятся данные, что такое размер клстера и тд
@MsAlexandr76
@MsAlexandr76 Год назад
у него есть поищите на канале!
@OpenFrimeTVcom
@OpenFrimeTVcom Год назад
@@MsAlexandr76 вы меня дурите. нету такого
@user-pd8vg1gd5z
@user-pd8vg1gd5z Год назад
Теперь точно есть) ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-FQ_xeY0eCpA.html
@user-pl6hu6si1u
@user-pl6hu6si1u Год назад
23:51 если я правильно понял, то это второй кейс из момента 22:08. Тогда получается ошибочка: чёрные дети красного брата не должны быть нулями. Потому, что их чёрные высоты в момент до удаления равны 1, а не нулю.
@user-bw1fh9pd3i
@user-bw1fh9pd3i Год назад
Alek OS скажите пожалуйста в какой программе вы делаете слайды?
@iliyalaz6132
@iliyalaz6132 Год назад
Очень интересно
@user-eb1qm7ho8h
@user-eb1qm7ho8h Год назад
Забавно что я сейчас как раз делала домашку з бинарньім деревом, и єто видео просто бьіло у меня в реках Судьба походу
@sospeedwagon9289
@sospeedwagon9289 Год назад
це відео ще й тілки но вийшло, у тебе там мабудь кайф лютий?
@user-zt8zo5sd5c
@user-zt8zo5sd5c Год назад
Я не понимаю
@sospeedwagon9289
@sospeedwagon9289 Год назад
@@user-zt8zo5sd5c пон
@user-ke7su7zc9l
@user-ke7su7zc9l Год назад
даааа, я тоже
@china6714
@china6714 Год назад
Как можно было жить и не знать этого, спасибо P.S. Серьёзно, без шуток
@call_nick
@call_nick Год назад
Пушкааааа
@daniilivanik5021
@daniilivanik5021 11 месяцев назад
Персистентное AVL- дерево по неявному ключу с групповыми модификациями - кайф
@ceo-s
@ceo-s Год назад
Круто. Но жестко)
@wensietland5169
@wensietland5169 Год назад
Хорошие видео, по кормену цикл идет?
@memyselfi9155
@memyselfi9155 Год назад
Братан что за музон в начале до рекламы ?
@cepmadbrozzer4448
@cepmadbrozzer4448 Год назад
Разбор структур различных файловых систем не ожидается ли в ближайшем будущем?
@user-nm8fu9fh7j
@user-nm8fu9fh7j Год назад
Интересная тема, а какое практическое применение, где это можно встретить?
@alekseybiryukov7497
@alekseybiryukov7497 Год назад
Ничего не понятно, но очень интересно!
@xagent
@xagent Год назад
на 8:03 у вас опечатка. Вы говорите что сначала выводим родителя потом левого и правого, но в коде у вас наоборот сначала левый и правый и потом родитель.
@web-writer4769
@web-writer4769 Год назад
the best ever
@MgsMen
@MgsMen 4 месяца назад
Монтаж топ, но умение объяснять это искусство. Нашёл видео по этой же теме 9летней давности и сразу всё понял. А тут от ролика только перегрузка лишняя. Но лайк за труды
@gabibli
@gabibli 3 месяца назад
Скинь ролик плз
@sweetarteko
@sweetarteko Год назад
Неалохо было бы посмотреть настолько подробное видео года два назад, когда была такая дисциплина. Было бы гораздо легче.
@alanturing487
@alanturing487 5 месяцев назад
А где найти код из видео? И, кажется, на видео не попал метод Rotate, необходимый для реализации балансировки после удаления в КЧ дереве.
@artroden3746
@artroden3746 Год назад
6:55 то есть я могу в качестве корня взять либо 7 либо 6?
@borshch334
@borshch334 Год назад
Ее новое видео!
@KIR_Engineer
@KIR_Engineer 2 месяца назад
1. 7:39, 7:56 print(node.value) разве нам не нужно вывести ключи, т.е. print(node.key) ? 2. 14:22 фукция leftRoatet строка node.right_.left_ = node.right_.right_; не лишняя? 3. После вставки в узла АВЛ в дерево его нужно балансировать? P.s. очень крутое видео, спасибо.
@Ahmedhkad
@Ahmedhkad Год назад
Тинькофф ищет только Middle(+) . а видео про Junior(стажер) 😅
@vitaly_markov
@vitaly_markov Год назад
на 8:13 функции deleteTree и copyTree совершенно идентичные, хотя вроде разные обходы.......
@anolegych
@anolegych Год назад
Смотрю про красно-черное дерево в голове играют Rolling Stones😅
@user-pl6hu6si1u
@user-pl6hu6si1u Год назад
Paint it black, понимаю)
@user-ip2fg9up8u
@user-ip2fg9up8u 6 месяцев назад
Здесь представлен довольно запутанный способ поворота дерева, хотя он эффективен. Есть более простой способ, для начала лучше его освоить. выглядит это примерно так: private Node rotateLeft(Node oldParent) { Node newParent = oldParent.right; Node newParentLeft = newParent.left; newParent.left = oldParent; oldParent.right = newParentLeft; oldParent.computeHeight(); newParent.computeHeight(); return newParent; } Данный метод поворачивает поддерево и возвращает новый корень,. Чтобы его корректно использовать, нужно чтобы методы добавления и удаления возвращали Node, и предрекурсионном методе вызов должен быть таким root = add(key, root);, где root - это корень дерева.
@mikemerinoff
@mikemerinoff 11 месяцев назад
Подскажите, чем наибольший элемент дерева отличается от самого наибольшего?
@where631
@where631 Год назад
Thanks m8
@danitkriper4114
@danitkriper4114 Год назад
Объясните пожалуйста, а как черно-красные деревья связаны со значениями в них? Та выполняется правило, что левая ветвь меньше корня, а правая больше или равна?
@user-mt6wt9vc1x
@user-mt6wt9vc1x 9 дней назад
В двоичном дереве поиска для метода insert забыли условие для проверки равности ключей (для того чтобы заменить значение по уже существующему ключу).
@something-like-that
@something-like-that 8 месяцев назад
Что-то я совсем запутался... 7, 5, 8 в узлах - это пример ключей или значений? 4:20
@user-uu8jv2ki3h
@user-uu8jv2ki3h 9 месяцев назад
Хм, а если я пишу последовательность [0:💯] - это у меня будет одна ветка справа от начала до конца, или я что-то неправильно понял? P.S. Только написал коммент, тут же начался блок про АВЛ 🙂
@markbondarchuk7043
@markbondarchuk7043 Год назад
По-моему на 7:05 рекурсивно удалять дубль 6ки нужно в левом потомке node.left = delete(node.left, maxInLeft.key) , а не в правом как на видео.
@laranMQR
@laranMQR Год назад
Мне кажется, что нужно и там, и там. Т.е. нужно просто добавить node.left = delete(node.left, maxInLeft.key), а остальное также оставить.
@vsevolodkasatchikov6730
@vsevolodkasatchikov6730 Год назад
​@@laranMQRзачем и там, и там, если мы берём 6ку именно из левого дерева, значит ее оттуда и нужно удалить. Справа может отказаться другая 6ка, которую мы удалим "просто так"
@user-ze3ez3iy6c
@user-ze3ez3iy6c 10 месяцев назад
Мне кажется, когда рассказывали про удаление из красно-чёрного дерева, брата по ошибке назвали дядей
@sqrrrrrr
@sqrrrrrr Год назад
кайф кайф кайф
@nerusnotfound
@nerusnotfound Год назад
кайф
@Secvad
@Secvad Год назад
Классно чёрное дерево это конечно хорошо, но пока сам такую структуру не напишешь, то что-то полностью понять сложновато.
@p8wowyt121
@p8wowyt121 Год назад
я правильно понял, в видео код писался на java?(я python'ист, +немного знаю как выглядит C)
@An_entertaining_story
@An_entertaining_story Год назад
Комент для продвижения ролика*
@rypatokochev3387
@rypatokochev3387 Год назад
А можешь сделать видео про сжатие zip rar их разницу и тд. Всегда было интересно как можно сохраняя содержание уменьшить объем и почему это не работает с видео хотя работает с фото
@user-ix4cm7ch5z
@user-ix4cm7ch5z Год назад
как это с видео не работает ??
@user-qw6xi9pr5d
@user-qw6xi9pr5d Год назад
Уменьшить объём сохранив содержание можно за счёт того, что часть данных дублируется. Простейший пример: 111111 0000 = 1х6, 0х4, то есть для записи 10 чисел можно использовать 10 знаков или всего 4. Возможно не очень понятно объяснил, если интересна эта тема можно погуглить про алгоритмы семейства LZ( LZ78, LZW) и про алгоритм Хаффмана. Алгоритм Хаффмана как раз на бинарных деревьях строится
@rypatokochev3387
@rypatokochev3387 Год назад
@@user-ix4cm7ch5z попробуйте зипнуть видео, размер не уменьшиться практически никак
@user-pd8vg1gd5z
@user-pd8vg1gd5z Год назад
Часть есть тут ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-e4vMlLbYHWI.html: про сжатие, его виды и фото
@Wave_ch
@Wave_ch 10 месяцев назад
​​@@user-ix4cm7ch5zотому что подавляющее большинство видеофайлов уже сжатые сами по себе, иначе 5-минутный видеоролик в Full-HD разрешении занимал бы несколько гигов места и, соответственно, каждый короткий ролик на Ютубе по времени загружался бы как полнометражный фильм
@user-ho9hy2oc9c
@user-ho9hy2oc9c Год назад
Год назад, будучи на первом курсе, сломал себе голову реализацией Fibonacci Heap, тоже тема годная и непонятная)
@andromeda_vesna
@andromeda_vesna Год назад
Омг тут про красно-чёрное дерево... Жэээсть
@MsAlexandr76
@MsAlexandr76 Год назад
ПРо миниальный/максимальный элемент, может быть не самый нижний, а крайний слева и крайний справа?
@user-pl6hu6si1u
@user-pl6hu6si1u Год назад
да. автор говорит про отсудите у минимальных/максимальных 2 детей. Если посмотришь на код справа, то там уточняется, что у минимального не должно быть никого слева (а справа вполне может и иметься), и у максимального нет ребёнка справа.
@mianaviatte
@mianaviatte Год назад
Объясните, пожалуйста, почему на 17:33 в правой ветке дерева узел черный, а не красный, если у него двое детей и оба черные листы? По объяснению, он должен быть красный и тогда все красно-черное древо несбалансированно... или нет?
@dimondsafkage4620
@dimondsafkage4620 8 месяцев назад
Черный узел может иметь два черных ребенка, а вот красный узел не просто может, а обязан. В этом вся логика
@Tim-Slim
@Tim-Slim Год назад
Ох, что-то мне не хорошо 😁
Далее
Did you find it?! 🤔✨✍️ #funnyart
00:11
Просмотров 27 млн
КАК УСТРОЕН PNG-ФАЙЛ?
36:46
Просмотров 293 тыс.
Хэш-таблицы за 10 минут
13:01
Просмотров 117 тыс.
КАК УСТРОЕН ТОРРЕНТ?
18:51
Просмотров 325 тыс.
Did you find it?! 🤔✨✍️ #funnyart
00:11
Просмотров 27 млн