LOWEST COMMON ANCESTOR OF A BINARY TREE III [PYTHON]

Sdílet
Vložit
  • čas přidán 18. 02. 2022
  • In this video we'll be solving a popular Facebook interview question: Lowest Common Ancestor of a Binary Tree III. This problem has two solutions, one being quite easy to derive and the other is one of those "ah-ha" trick solutions that you need to have seen before to know off the bat. But once you've seen it, the solution is so elegant that it will blow your mind and is the most optimal way to solve this particular question.

Komentáře • 39

  • @veluchamy-zt7gd
    @veluchamy-zt7gd Před 3 měsíci +6

    Man, honestly it is one of the underrated channel. Your explanation is crystal clear, easy to understand. I had difficulty in understanding complex problem's solutions, but your videos really helped me. Thanks a lot :)

  • @hemmy123
    @hemmy123 Před 2 měsíci +3

    The two pointer approach took me a while to understand but I think this rephrasing might help a few people. As mentioned in the video, P_copy takes 3 steps and Q_copy takes 2 steps. This results in a difference of 1 step which is not what we want. What we need to do is essentially make them do the same amount of work so we arrive at the same node. What we can do is combine them, so P_copy and Q_copy do the same amount of work
    So if we do the 'reset' as mentioned in the video:
    P_Copy does 3 + 2 steps and
    Q_Copy does 2 + 3 steps.
    This results in the difference being 0 so no matter where they are in the tree they will always end up at the same place!

  • @user-dp9gi1vg8r
    @user-dp9gi1vg8r Před 16 hodinami

    Thanks, bro, really good explanation, love it!

  • @cheekyjay7800
    @cheekyjay7800 Před 2 lety +5

    Brilliant explanation! I got quite confused when I was browsing through the discussion sessions and saw these 5 lines of magic Lol... but your video just made it so clear!

    • @crackfaang
      @crackfaang  Před 2 lety +1

      Thanks for the kind words and glad you found value from the video explanation. Make sure to subscribe so you don’t miss future videos!

  • @eddiej204
    @eddiej204 Před rokem +4

    The solution sounds like fast slow pointers technique and it is brilliant. Thanks a lot, ser.

    • @crackfaang
      @crackfaang  Před rokem +2

      Yea it’s super cool. Though a bit hard to come up with if you haven’t seen it before. My mind was blown when I saw the solution for the first time

  • @ebenezeracquah478
    @ebenezeracquah478 Před rokem

    Highly appreciated! Bind blowing solution

  • @JRivero
    @JRivero Před měsícem

    So clear. Thank you very much

  • @Mo.Abufouda
    @Mo.Abufouda Před 2 lety +2

    This channel is underrated!
    Great work. Keep the good work! :)

    • @crackfaang
      @crackfaang  Před 2 lety +1

      Thank you for the kind words! I'll keep uploading, make sure you're subscribed so you don't miss future uploads :)

  • @bhaveshvarma4313
    @bhaveshvarma4313 Před 2 lety

    Thanks man, Now Understand similar question of finding intersection of two linked list.

  • @MrDoubleWhy
    @MrDoubleWhy Před 5 měsíci

    Amazing explanation! Thank you!

  • @rsKayiira
    @rsKayiira Před rokem

    This is such an excellent solution. I had to watch it twice though because it wasn't clear you would be swapping the pointers so I was wondering but once I figured that out I was like wow. One other thing is maybe calling them q_ptr and p_ptr would have been better and its odd that the examples require us to return values yet we return nodes

  • @markvaldez8602
    @markvaldez8602 Před 18 dny

    Awesome! Thank you!

  • @zhengyuzhou2288
    @zhengyuzhou2288 Před 3 měsíci

    Thank you, that explanation is very clear.

  • @MinhNguyen-lz1pg
    @MinhNguyen-lz1pg Před 2 lety

    Well done mate! Appreciate the thoughtful explanation!

    • @crackfaang
      @crackfaang  Před 2 lety

      Thanks and make sure to subscribe!

  • @louie0187
    @louie0187 Před 4 měsíci +2

    Basically same "ah-ha" trick as Leetcode 160 -- Intersection of Two Linked Lists

  • @usrenaem
    @usrenaem Před 3 měsíci

    Everything is amazing in this video! With your explanation the second solution clicks pretty easily. But what's IQ one should have to be able to solve it at an interview, within 15-20 minutes and without seeing the solution before, it's probably around 160.

    • @crackfaang
      @crackfaang  Před 3 měsíci

      You don't need a high IQ lol. You just need to have seen the question before and basically memorized the solution. Just the nature of the game unfortunately

  • @shraddhabarke1750
    @shraddhabarke1750 Před 5 měsíci

    amazing work!! :)

  • @sunwoodad
    @sunwoodad Před 21 dnem

    You said the time complexity of naive solution is O(2N), but I just think it's O(N). Even the traverse is twice which is by p and also by q, total sum of them won't be greater than N.

  • @sarayarmohammadi3376
    @sarayarmohammadi3376 Před měsícem

    Thank you

  • @preityhansaa9150
    @preityhansaa9150 Před 2 lety

    question: if a node is LCA of itself (descendant) meaning it is the parent of itself so do we have to add the same node as parent of itself instead of Null

  • @preityhansaa9150
    @preityhansaa9150 Před 2 lety +2

    This is good! Thanks for the post. can you post a variation of this for other 2 LCA problems the other ones doesnt have reference to its parent 1644 1676

    • @crackfaang
      @crackfaang  Před 2 lety +2

      No problem my friend. If you subscribe I will make these two videos, just for you ;)

    • @preityhansaa9150
      @preityhansaa9150 Před 2 lety +1

      @@crackfaang subscribed!

  • @dhanashreegodase7933
    @dhanashreegodase7933 Před 2 lety

    thanks

  • @fallencheeto4762
    @fallencheeto4762 Před 4 měsíci

    No way someone figures this out, but it makes so much sense lol

  • @bittu007ize
    @bittu007ize Před 2 lety

    Love from India

    • @crackfaang
      @crackfaang  Před 2 lety

      Thank you for your support! Make sure to subscribe so you don’t miss future videos

  • @adiesha_
    @adiesha_ Před 4 měsíci +1

    I am hard time understand why the last solution is linear time. Suppose we have a tree with one left branch of length n-1 and one right branch of length n. Then in order to level the paths you need to run the loop n times, and path length is n. Shouldn't this be O(n^2)?

    • @Krankschwester
      @Krankschwester Před 2 měsíci +2

      The loop wouldn't run N times, but abs(depth of p - depth of q). I do agree that this solution doesn't seem very good. Imagine you have the same example you mentioned but one node is at depth 1e4, the other one at 1e6. You would need to repeat this loop abs(1e4 - 1e6) times, which is awful.

  • @leetsqlcode1906
    @leetsqlcode1906 Před měsícem

    is it |b-a| = |a-b|?

  • @n_x1891
    @n_x1891 Před 7 měsíci

    Tortoise hare strikes again

  • @tempuser3560
    @tempuser3560 Před 5 měsíci +2

    At 3:39, shouldn't the time complexity be 2*log(n) instead of 2N?
    We're only looking at the height of the tree in each case

    • @adiesha_
      @adiesha_ Před 4 měsíci

      It's not a balanced tree, as far as I understand