Тёмный

Test If A Binary Tree Is Height Balanced ("Balanced Binary Tree" on LeetCode) 

Back To Back SWE
Подписаться 240 тыс.
Просмотров 96 тыс.
50% 1

Free 5-Day Mini-Course: backtobackswe.com
Try Our Full Platform: backtobackswe.com/pricing
📹 Intuitive Video Explanations
🏃 Run Code As You Learn
💾 Save Progress
❓New Unseen Questions
🔎 Get All Solutions
Question: Write a program that takes the root of a binary tree as input and checks whether the tree is height-balanced.
A tree is height balanced if for each node in the tree, the difference in the height of its left and right subtrees is at most one.
Approach 1 (Get Height Of Tree Rooted At Each Node)
We can perform a traversal of the tree and at each node get the height of its left and right subtrees.
This wastes time as we will be repeating work and the traversal of nodes.
Approach 2 (Drill Down With Recursion And Respond Back Up)
We can notice that we don't need to know the heights of all of the subtrees all at once.
All we need to know is whether a subtree is height balanced or not and the height of the tree rooted at that node, not information about any of its descendants.
Our base case is that a null node (we went past the leaves in our recursion) is height balanced and has a height of -1 since it is an empty tree.
So the key is that we will drive towards our base case of the null leaf descendant and deduce and check heights on the way upwards.
Key points of interest:
1.) Is the subtree height balanced?
2.) What is the height of the tree rooted at that node?
Complexities
Time: O( n )
This is a postorder traversal (left right node) with possible early termination if any left subtree turns out unbalanced and an early result bubbles back up.
At worst we will still touch all n nodes if we have no early termination.
Space: O( h )
Our call stack (from recursion) will only go as far deep as the height of the tree, so h (the height of the tree) is our space bound for the amount of call stack frames that we will create
++++++++++++++++++++++++++++++++++++++++++++++++++
HackerRank: / @hackerrankofficial
Tuschar Roy: / tusharroy2525
GeeksForGeeks: / @geeksforgeeksvideos
Jarvis Johnson: / vsympathyv
Success In Tech: / @successintech
++++++++++++++++++++++++++++++++++++++++++++++++++
This question is number 10.1 in "Elements of Programming Interviews" by Adnan Aziz, Tsung-Hsien Lee, and Amit Prakash.

Наука

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

 

20 янв 2019

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 225   
@BackToBackSWE
@BackToBackSWE 5 лет назад
Table of Contents: The Problem Introduction 0:00 - 0:33 Cases That Are Height Balanced 0:33 - 1:56 Cases That Are NOT Height Balanced 1:56 - 2:58 Approach #1: Get Heights of Subtrees At Each Node 2:58 - 3:46 Approach #2: Recurse To Base Cases 3:46 - 4:23 Walkthrough of The Recursion 4:23 - 12:39 Time Complexity 12:39 - 13:25 Space Complexity 13:25 - 13:39 Wrap Up 13:39 - 13:57 The teacher's notes contain a link to the code for the problem discussed in the video. It is fully commented for teaching purposes strictly.
@dolcyrao5763
@dolcyrao5763 3 года назад
You're really amazing, I was enjoying your teaching. Thanks a lot for this high-quality teaching for free.
@BackToBackSWE
@BackToBackSWE 3 года назад
great to hear!!!
@anthonysummit3098
@anthonysummit3098 3 года назад
Where is the code?
@sivaprakashkkumar9691
@sivaprakashkkumar9691 3 года назад
Where is code
@debanjanasantra6724
@debanjanasantra6724 3 года назад
Could not find the link to the code :(
@BismaSuleman
@BismaSuleman 3 года назад
Me on Tinder: Hey, what is your height? And are you balanced?
@BackToBackSWE
@BackToBackSWE 3 года назад
ye
@ExplorerSpace
@ExplorerSpace 3 года назад
@@BackToBackSWE i am average height
@johnpaul4301
@johnpaul4301 3 года назад
Balanced here might mean whether your tootsiroll matches your height
@WyMustIGo
@WyMustIGo 2 года назад
@@johnpaul4301 ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-lbnoG2dsUk0.html
@stephyjacob1256
@stephyjacob1256 5 лет назад
Sharing this channel to all my friends who are interested to learn data structure algorithm .. Please make more videos on Data Structure and algorithms .. Believe me nobody tech like you. This channel has potential to become one of the best. The difference between you and others, is that most people just jumps directly into the solution but you tell us 'the thought process', 'how to interpret the problem' which are most important. Your think loud approach is best part. Please don't stop making such video. People like me are always with you.
@BackToBackSWE
@BackToBackSWE 5 лет назад
Haha thanks
@baraaabuasal5626
@baraaabuasal5626 Месяц назад
yes!!
@rban123
@rban123 4 года назад
Better than my data structures professor, thank you
@BackToBackSWE
@BackToBackSWE 4 года назад
thx
@nikhilkumarmishra1225
@nikhilkumarmishra1225 5 лет назад
OMG the way you explain the idea behind why the algorithm works, it just blew me away. Thanks a lot mate!
@BackToBackSWE
@BackToBackSWE 5 лет назад
wassup
@josephwong2832
@josephwong2832 3 года назад
asking the "critical question" and then returning the answer to that question to my parent is a great way to reason about recursion in general your teaching style sir is on another level!!!
@BackToBackSWE
@BackToBackSWE 3 года назад
thanks!
@adityajain-fn6ne
@adityajain-fn6ne 4 года назад
You deserve way way more recognition and credit for the work you have done sir! better than any college professor I have had.
@BackToBackSWE
@BackToBackSWE 4 года назад
thanks and thx
@psthakur1199
@psthakur1199 4 года назад
Loved that idea of "asking a question".Thanks man!!
@BackToBackSWE
@BackToBackSWE 4 года назад
ye
@turnuptheMIKEG
@turnuptheMIKEG 3 года назад
you're a remarkable teacher. blew my PhD data structures professor out of the water, honestly. thank you for making these videos. I'm surviving interview season bc of this.
@BackToBackSWE
@BackToBackSWE 3 года назад
lol nice, sure sure, they are a relic of the past self. I don't even remember recording some of these. Nice nice, you'll make it yo
@afsinyilmaz8665
@afsinyilmaz8665 3 года назад
great way of explaining stuff...Keep up the good work...you folks are as valuable as nation's best teachers.
@PherricOxide
@PherricOxide 5 лет назад
Thanks for the videos! They're very well done compared to most of the others where people either start writing code immediately or jump straight to the solution without explaining how they got there.
@BackToBackSWE
@BackToBackSWE 5 лет назад
Sure, this channel still has a long way to go
@priyogopalsingha3487
@priyogopalsingha3487 2 года назад
undoubtedly, the best explanation of how recursion works in trees
@missrockinout
@missrockinout 4 года назад
you get so into explaining this, gotta love the head scratch lmao thanks for an awesome explanation :D
@BackToBackSWE
@BackToBackSWE 4 года назад
lol wut
@SOURAVKUMAR-tw3ds
@SOURAVKUMAR-tw3ds 3 года назад
awesome work bro!! helped a lot in visualization of recursion calls
@ruthylevi9804
@ruthylevi9804 2 года назад
you are so gifted at teaching, never stop!
@deepamkumar5211
@deepamkumar5211 4 года назад
Your explanation is the best i have ever seen and really helps to understand these difficult problems. I appreciate your selfless work and the dedication with which you teach us these topics..Got to learn a lo from you,keep uploading more videos and soon this channel would turn out to be the best resource for interview preparation.
@BackToBackSWE
@BackToBackSWE 4 года назад
thx
@johnmcway6120
@johnmcway6120 4 года назад
Thank you very much. I myself teach myself to code, I'm also a teacher in kindergarten. I recognize a lot of myself in you. Keep up the good work!
@BackToBackSWE
@BackToBackSWE 4 года назад
Nice! thanks!
@UHemanthaKumar
@UHemanthaKumar 3 года назад
I am so glad that I found your channel on RU-vid...! Thank You very Much Sir!
@BackToBackSWE
@BackToBackSWE 3 года назад
welcome
@quirkyquester
@quirkyquester 4 года назад
Thank you man! This video really helps me to understand the process of solving the problem.
@BackToBackSWE
@BackToBackSWE 4 года назад
sure
@max500k
@max500k 3 года назад
Great job! You explained this well
@kunpeng8646
@kunpeng8646 4 года назад
What a smart and attractive illustration, well-done man!
@BackToBackSWE
@BackToBackSWE 4 года назад
thanks
@wellingtonzane4288
@wellingtonzane4288 5 лет назад
Really detailed and clear explanation! Thank you!!!
@BackToBackSWE
@BackToBackSWE 5 лет назад
sure
@rahoolification
@rahoolification 4 года назад
What you are doing is nothing short of humanitarian work my friend!
@BackToBackSWE
@BackToBackSWE 4 года назад
ye
@Don_ron666
@Don_ron666 5 лет назад
Finally a clear cut video good job!
@BackToBackSWE
@BackToBackSWE 5 лет назад
thanks
@rakhman8621
@rakhman8621 Год назад
The way you explain everything man…the number of times you revisit some moments is perfect, the speed with which you explain the material is perfect. Keep up the good work and thank you for teaching us such important topics in such a great way.
@TheAntloo
@TheAntloo 4 года назад
Awesome walkthrough! Gave me a nice intuition on how I would write the code. Do you think you could make a video on how to insert a node into a BBST?
@BackToBackSWE
@BackToBackSWE 4 года назад
Nice. and maybe.
@sankethb.k642
@sankethb.k642 4 года назад
Thank you very much sir, your channel will soon be on the top.
@BackToBackSWE
@BackToBackSWE 4 года назад
thanks
@wahtthepho
@wahtthepho 3 года назад
excellent explanation!! thank you!
@Jan_Jan_
@Jan_Jan_ 4 месяца назад
Amazing explanation, thank you! :)
@powerstrike97
@powerstrike97 3 года назад
Nice explanation! Thank you!
@fantasy9960
@fantasy9960 Год назад
wow, your teaching is amazing! thanks again!
@ShortGiant1
@ShortGiant1 4 года назад
Great video, thanks. Appreciate the table of contents.
@BackToBackSWE
@BackToBackSWE 4 года назад
May you flourish
@TacklessNebula3
@TacklessNebula3 2 года назад
Made your 2K to 2.1K... Thanks for the brief explanation!
@qingruxia6312
@qingruxia6312 3 года назад
I love u your videos so much! Thank you so much for your time and work!
@hinocenciopaulo
@hinocenciopaulo 5 месяцев назад
Thank you so much for this beautiful explanation 🙏
@ramizrizwan3057
@ramizrizwan3057 Год назад
Such a good explanation, you’re the best!
@BackToBackSWE
@BackToBackSWE Год назад
Happy Holidays! Really glad to help 🎉 Do you know about the BacktoBackSWE 5 Day Free Mini Course? Check it out here - backtobackswe.com/
@kevinandres3306
@kevinandres3306 5 лет назад
EXCELLENT explanation. extremely clear
@BackToBackSWE
@BackToBackSWE 5 лет назад
thanks, I like you
@neghatnazir1668
@neghatnazir1668 4 года назад
awesome explination , i love the way you explain things.
@BackToBackSWE
@BackToBackSWE 4 года назад
thx
@pewdiepieschair2693
@pewdiepieschair2693 3 года назад
thanks lad, much appreciated!
@neotong9885
@neotong9885 5 лет назад
really nice job on explaining Balanced Binary Tree!
@BackToBackSWE
@BackToBackSWE 5 лет назад
thanks
@rhiannonsmeby9566
@rhiannonsmeby9566 3 года назад
This video was fireeee I hate recursion but this visualization and explanation really helped
@SreyesSrinivasan
@SreyesSrinivasan 2 года назад
Great explanation, thanks a lot :)
@malaguna66
@malaguna66 4 года назад
This explanation is so clear so good!
@BackToBackSWE
@BackToBackSWE 4 года назад
glad it helped
@maripaz5650
@maripaz5650 3 года назад
Best interview prep ever :)
@BackToBackSWE
@BackToBackSWE 3 года назад
thanks
@baraaabuasal5626
@baraaabuasal5626 Месяц назад
at 6:00 I was like, say no more => Subscribed. fkn love the way explain stuff man
@khan.mansoor
@khan.mansoor 3 года назад
Great explanation! Do you have a link to the code for this problem that I can refer to?
@doruwyl
@doruwyl 5 лет назад
Very cool approach with the nodes which are "bellow sea level". 😊
@BackToBackSWE
@BackToBackSWE 5 лет назад
hahaha
@adenosinetp10
@adenosinetp10 3 года назад
why this has so less views??! No one these days teaches like this guy...not even my professor does....this video helped me creating a foundation for my data structure course
@BackToBackSWE
@BackToBackSWE 3 года назад
ye
@nandanimadhukar
@nandanimadhukar 4 года назад
Awesome explanation! Trees are speaking for themselves :D
@BackToBackSWE
@BackToBackSWE 4 года назад
ye
@pushkalkatara2153
@pushkalkatara2153 4 года назад
Hey, really a great explanation man! It'd be awesome if you could whiteboard the pseudocode too after the explanation.
@BackToBackSWE
@BackToBackSWE 4 года назад
yeah good idea
@RedRabbitII
@RedRabbitII 2 года назад
love this! thank you
@eliasmoreno4672
@eliasmoreno4672 4 года назад
you explained this so well. wow. *subscribed :)
@BackToBackSWE
@BackToBackSWE 4 года назад
thanks!
@MuhammadIrshadAli
@MuhammadIrshadAli 4 года назад
Man, you should train CS professors at universities on how to teach algorithms
@BackToBackSWE
@BackToBackSWE 4 года назад
nah
@ashwanigupta4672
@ashwanigupta4672 3 года назад
Finally got an awesome explanation 🏆
@yuyu-qr7ih
@yuyu-qr7ih 4 года назад
very detailed explaination brada love u
@BackToBackSWE
@BackToBackSWE 4 года назад
sure homie
@mpalanipsbb
@mpalanipsbb 7 месяцев назад
Best explanation!
@hugenerretho9151
@hugenerretho9151 2 года назад
ur explanation is so concise that my golden retriever can now display his treats in tree structure
@BackToBackSWE
@BackToBackSWE 2 года назад
Thank you, glad you liked it 😀 Do check out backtobackswe.com/platform/content and please recommend us to your family and friends 😀
@wowzande
@wowzande 4 года назад
That's gangsta as fuck we need more of this
@BackToBackSWE
@BackToBackSWE 4 года назад
haha
@amitmishra2736
@amitmishra2736 4 года назад
Dude! I am not seeing the code in the down :( could you please update the Link
@BackToBackSWE
@BackToBackSWE 4 года назад
The repository is deprecated - we only maintain backtobackswe.com now.
@realmarciomarinho
@realmarciomarinho 2 года назад
You said the code was below, but I cannot find it.
@syedmdharris8814
@syedmdharris8814 3 года назад
we can simply check whether each node has left and right node? can you explain about that
@saikatdutta1991
@saikatdutta1991 4 года назад
Hey bro, I want you to explain "Median in a stream of integers (running integers)" this problem. I am unable to understand why we need to use self balanced binary tree to solve this problem. Thanks. I will be helpful.. You explain better than any other.
@BackToBackSWE
@BackToBackSWE 4 года назад
I'll be covering that in my class but not on the channel, most of my technical videos will go there now. I'm going to convert the channel into a more "I'm building things" type thing soon
@hikemalliday6007
@hikemalliday6007 Год назад
this dude kills it
@zooomba62
@zooomba62 Год назад
great work brother
@ahiduzzamanahir1338
@ahiduzzamanahir1338 2 года назад
WHAT! Did you just teach me recursion? I thought it was impossible!
@user-zm5gs1sv2n
@user-zm5gs1sv2n 4 года назад
thank you much ,I totally uderstand how recursion work
@BackToBackSWE
@BackToBackSWE 4 года назад
nice
@AllNaturale11
@AllNaturale11 Год назад
very helpful. thank you!
@BackToBackSWE
@BackToBackSWE Год назад
Thank you! Please enjoy a special code from us - backtobackswe.com/checkout?plan=lifetime-legacy&discount_code=AllNaturale11 🎉
@mohannadbayoumi9686
@mohannadbayoumi9686 4 года назад
May I ask what the complexity of the non-efficient way you mentioned in the beginning of the video is?
@BackToBackSWE
@BackToBackSWE 4 года назад
Quadratic O(n^2)
@shijames4129
@shijames4129 5 лет назад
nice video!!! thanks!!
@BackToBackSWE
@BackToBackSWE 5 лет назад
sure
@wappa6914
@wappa6914 4 года назад
Thank you from France !
@BackToBackSWE
@BackToBackSWE 4 года назад
sure! 🇫🇷
@Kingbund
@Kingbund Год назад
wow you are super good!
@aatifnazar1766
@aatifnazar1766 4 года назад
A big thank you for this content
@BackToBackSWE
@BackToBackSWE 4 года назад
thanks for being here
@techzoo1
@techzoo1 4 года назад
Your explanation is somehow kinda funny (in a good way)!
@BackToBackSWE
@BackToBackSWE 4 года назад
yeah I was weird when the channel started. no one was watching
@joseph2073
@joseph2073 3 года назад
thanku so so much man....
@poojaguru2516
@poojaguru2516 5 лет назад
Lifesaver : ) Thank you so much!! Best explanation ever!!
@BackToBackSWE
@BackToBackSWE 5 лет назад
sure
@wentingzhang3097
@wentingzhang3097 4 года назад
I'm having trouble finding the code in the description! :(
@BackToBackSWE
@BackToBackSWE 4 года назад
The repository is deprecated - we only maintain backtobackswe.com now.
@aatifnazar1766
@aatifnazar1766 4 года назад
The node which is marked red cross will not return 2. It breaks the call there only.
@BackToBackSWE
@BackToBackSWE 4 года назад
ok
@stargazer8718
@stargazer8718 Год назад
What's the difference between this and an AVL tree?
@shashankshekhar390
@shashankshekhar390 4 года назад
That helped, thanks.
@BackToBackSWE
@BackToBackSWE 4 года назад
sure
@ifelsedeveloper
@ifelsedeveloper 4 года назад
hey! love your videos! one question, can't i just check the absolute height difference from each node? without asking are you balanced to each node?
@BackToBackSWE
@BackToBackSWE 4 года назад
Yes but that will duplicate subtree measurements
@pawanacharya997
@pawanacharya997 4 года назад
How can someone explain this clearly wow you really helped me.. thanks
@BackToBackSWE
@BackToBackSWE 4 года назад
nice
@randalllionelkharkrang4047
@randalllionelkharkrang4047 3 года назад
if it has to fail, it will always fail at the root node right? can you provide with a counterexample to what I said?
@abbasjradi5001
@abbasjradi5001 2 года назад
Exactly, it doesnt wkrk
@XLpacman805
@XLpacman805 2 года назад
Thanks
@user-ej3iw8lw3w
@user-ej3iw8lw3w 2 года назад
A balanced binary tree, also referred to as a height-balanced binary tree, is defined as a binary tree in which the height of the left and right subtree of any node differ by no more than 1.
@manikandanramesh826
@manikandanramesh826 2 года назад
well explanation
@jgraiver
@jgraiver 4 года назад
have you done the code for this anywhere?! loved the video
@BackToBackSWE
@BackToBackSWE 4 года назад
I think so here: github.com/bephrem1/backtobackswe
@maidul13
@maidul13 4 года назад
I just don't get why its max(-1,-1)+1, is that supposed to be equivalent to taking absolute value? if so can you explain please
@BackToBackSWE
@BackToBackSWE 4 года назад
I am just simulating the code as it would execute the base case.
@ggzz8845
@ggzz8845 3 года назад
where is the code ?
@sameerpatel3476
@sameerpatel3476 3 года назад
Would a tree be considered balanced tree if the root have only one node at one side ?
@darshantsdarshan1
@darshantsdarshan1 4 года назад
This guy is awesome 👏
@BackToBackSWE
@BackToBackSWE 4 года назад
I'm ok.
@MoscleBrog
@MoscleBrog 7 месяцев назад
people like u save students like us😃
@ButhainaMoh
@ButhainaMoh Год назад
oh this takes me to understand this
@salwaabdullah2003
@salwaabdullah2003 4 года назад
Thanks 🙏
@BackToBackSWE
@BackToBackSWE 4 года назад
sure
@MahmoudSayed-hg8rb
@MahmoudSayed-hg8rb Год назад
I'm kinda late idk if you'll respond to this comment first of all thanks for your efforts. second thing ... as far as I know ( and i almost know nothing yet, I'm just a beginner), something doesn't add up in the last example Dont we consider a tree a Balanced tree if the absolute difference of the heights of each side is
@ashwinvarma9349
@ashwinvarma9349 3 года назад
Dude please include in your videos bro that would be of great help!
@ashishbisht980
@ashishbisht980 4 года назад
Bro you are awesome , love from India
@BackToBackSWE
@BackToBackSWE 4 года назад
much love
@nishanth998
@nishanth998 4 года назад
where can i find the code in the website??plz tell me
@BackToBackSWE
@BackToBackSWE 4 года назад
The repository is deprecated - we only maintain backtobackswe.com now.
@researchandbuild1751
@researchandbuild1751 4 года назад
Could you just do a breadth search and if the count of children at a level count is odd, it is not balanced?
@BackToBackSWE
@BackToBackSWE 4 года назад
How would this work exactly?
@researchandbuild1751
@researchandbuild1751 4 года назад
@@BackToBackSWE well it seemed like possibly a feature of an unbalanced binary tree is it would have a level with non-even count of nodes. Unless i am misunderstanding what a balanced tree should look like (which is possible). So you just make a queue and walk down the nodes, pushing children at each. If your total count of children in the queue is ever odd at each step then you know the tree is unbalanced. Not sure if that would work or not though, just pondering
@shruthiranganatha7333
@shruthiranganatha7333 4 года назад
Why add 1 to max(heightOfRightNode, heightOfLeftNode) ?, Wha's the logic here??
@BackToBackSWE
@BackToBackSWE 4 года назад
Including the node that the call is working on in the height as the calls go up
@Oleks380
@Oleks380 5 лет назад
Hey Could you please help me to figure out the complexity of my solution of this problem? It shows +- the same performance as your's on the Leetcode, but I'm not sure neither about space nor about time complexity ``` public class Solution110 { public boolean isBalanced(TreeNode root) { if (root == null) return true; return isBalanced(root.left) && isBalanced(root.right) && Math.abs(height(root.left) - height(root.right))
@BackToBackSWE
@BackToBackSWE 5 лет назад
This does what I described at 2:58. You can give it a upper bound of O(n^2). Here is my logic: My Logic: #1 The tree has n nodes #2 The isBalanced() function will be called on all n nodes worst case if the tree IS balanced #3 The height() function runs in Linear time with respect the amount of nodes in the subtree of the node passed to it #4 When height() is called, every node in root's subtree will get height() called on it further justifying #3 #5 So based on #1, we will be doing O( n * whatever work we do at each node ) #6 In #3 we established height() runs in linear time with respect to the amount of nodes below and including root. So each call of height() from isBalanced() will do a fractional amount of work of n. O( fraction of n * n ) = O(n). Still linear even if we basically cut the amount of nodes in half by going to the left and right subtrees. #7 Because of #1, #5, and #6, we can provide an upper bound of Linear work for an amount of n nodes. O( n * n ) = O(n^2) This is my logic as it stands now. I can be incorrect because of the faulty nature of any of the above understandings. Please try to prove me wrong, because I am not always right. Challenge my understand as well as yours. Also to address "It shows +- the same performance as your's on the Leetcode, but I'm not sure neither about space nor about time complexity"...do not look at Elapsed Real Time to assess time complexity. Especially for Leetcode solutions. You HAVE to use LARGE n values. This is why it is called "asymptotic analysis". See this: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-myZKhztFhzE.html
Далее
🛑 до конца!
00:12
Просмотров 102 тыс.
Аминка ❤️
00:16
Просмотров 967 тыс.
Balanced Binary Tree - Leetcode 110 - Python
13:11
Просмотров 229 тыс.
Water powered timers hidden in public restrooms
13:12
Просмотров 561 тыс.
How Binary Search Makes Computers Much, Much Faster
6:51
10.1 AVL Tree - Insertion and Rotations
43:08
Просмотров 1,1 млн
Learn Binary search trees in 20 minutes 🔍
20:25
Просмотров 151 тыс.
Telefonu Parçaladım!😱
0:16
Просмотров 30 млн
НОВЫЕ ФЕЙК iPHONE 🤯 #iphone
0:37
Просмотров 349 тыс.
Копия iPhone с WildBerries
1:00
Просмотров 8 млн