LOWEST COMMON ANCESTOR OF A BINARY TREE III [PYTHON]

Поділитися
Вставка
  • Опубліковано 6 січ 2025

КОМЕНТАРІ • 53

  • @veluchamy-zt7gd
    @veluchamy-zt7gd 9 місяців тому +12

    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 7 місяців тому +14

    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!

    • @biavechiato
      @biavechiato 2 місяці тому +2

      This makes so much sense

  • @eddiej204
    @eddiej204 2 роки тому +14

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

    • @crackfaang
      @crackfaang  2 роки тому +4

      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

  • @cheekyjay7800
    @cheekyjay7800 2 роки тому +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  2 роки тому +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!

  • @Mo.Abufouda
    @Mo.Abufouda 2 роки тому +2

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

    • @crackfaang
      @crackfaang  2 роки тому +1

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

  • @sami9323
    @sami9323 3 місяці тому +1

    in this case, "n" (for the runtime complexity) is the height of the tree, not the number of nodes, correct?

  • @rsKayiira
    @rsKayiira 2 роки тому

    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

  • @steveroberts1045
    @steveroberts1045 2 місяці тому +1

    I believe the time complexity of the first solution is actually 2log(N). 2N indicates you would traverse every node when you are only traversing at most log(N) nodes for each given node.

    • @amvi659
      @amvi659 2 місяці тому +1

      Nope. It's actually 2*O(h) where h=height of the tree. In the best case, the height of the tree would be log(n), i.e., when it is balanced. In the worst case, it would be N which is when the tree is highly skewed. Hope that helps!

    • @MnumzanaMoyo
      @MnumzanaMoyo 2 місяці тому

      @@amvi659 hmm makes sense! thought it was log(n) in the worst case too!

  • @raghav28489
    @raghav28489 День тому

    If runner A has track of size E and runner B has track of size 2E where E= 1 edge distance, then they both will meet at time T = 2.
    When the tracks distance aren't divisible by each other for example let's say A has 7E and B has 8E, in this case the time taken will be LCM(8,7) = 56. So at T = 56 they both will meet. This is not an O(H) solution but rather O(H) ^ 2

  • @bhaveshvarma4313
    @bhaveshvarma4313 2 роки тому

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

  • @Rutik9999
    @Rutik9999 Місяць тому

    how about this solution-
    measure depths , the pointer which is at lower depth will be moved up until the depths are same, and then move p and q simultaneously to and retunr when p == q

  • @louie0187
    @louie0187 10 місяців тому +3

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

  • @zhengyuzhou2288
    @zhengyuzhou2288 9 місяців тому

    Thank you, that explanation is very clear.

  • @MrDoubleWhy
    @MrDoubleWhy 10 місяців тому

    Amazing explanation! Thank you!

  • @ebenezeracquah478
    @ebenezeracquah478 2 роки тому

    Highly appreciated! Bind blowing solution

  • @АльбусДамблодр
    @АльбусДамблодр 5 місяців тому

    Thanks, bro, really good explanation, love it!

  • @Ryan-g7h
    @Ryan-g7h 3 місяці тому

    this channel is real af,

  • @usrenaem
    @usrenaem 9 місяців тому

    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  9 місяців тому

      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

  • @chickentowel-ek
    @chickentowel-ek 6 місяців тому

    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.

  • @MinhNguyen-lz1pg
    @MinhNguyen-lz1pg 2 роки тому

    Well done mate! Appreciate the thoughtful explanation!

    • @crackfaang
      @crackfaang  2 роки тому

      Thanks and make sure to subscribe!

  • @JRivero
    @JRivero 6 місяців тому

    So clear. Thank you very much

  • @swapnanilgupta3046
    @swapnanilgupta3046 5 місяців тому

    Great explanation. The two pointer solution is exactly similar to Intersection of two linked lists problem. In an interview, would we be expected to come up with such a solution or will the set solution suffice?

  • @preityhansaa9150
    @preityhansaa9150 2 роки тому +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  2 роки тому +2

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

    • @preityhansaa9150
      @preityhansaa9150 2 роки тому +1

      @@crackfaang subscribed!

  • @rdnetala
    @rdnetala 2 місяці тому

    alternative naive solution:
    class Solution:
    def lowestCommonAncestor(self, p: 'Node', q: 'Node') -> 'Node':
    seen = set()
    while p:
    seen.add(p)
    p = p.parent

    while q not in seen:

    q = q.parent
    return q

  • @preityhansaa9150
    @preityhansaa9150 2 роки тому

    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

  • @markvaldez8602
    @markvaldez8602 6 місяців тому

    Awesome! Thank you!

  • @fallencheeto4762
    @fallencheeto4762 10 місяців тому

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

  • @tempuser3560
    @tempuser3560 11 місяців тому +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_ 10 місяців тому

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

    • @MnumzanaMoyo
      @MnumzanaMoyo 2 місяці тому

      @@adiesha_ yeah, you're right. we could get a 'linked list' in the worst case

  • @adiesha_
    @adiesha_ 10 місяців тому +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 8 місяців тому +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.

  • @shraddhabarke1750
    @shraddhabarke1750 10 місяців тому

    amazing work!! :)

  • @sarayarmohammadi3376
    @sarayarmohammadi3376 6 місяців тому

    Thank you

  • @jacquesasinyo5560
    @jacquesasinyo5560 4 місяці тому

    Thanks. bro next time use different colors for the drawing.

  • @leetsqlcode1906
    @leetsqlcode1906 7 місяців тому

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

  • @bittu007ize
    @bittu007ize 2 роки тому

    Love from India

    • @crackfaang
      @crackfaang  2 роки тому

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

  • @dhanashreegodase7933
    @dhanashreegodase7933 2 роки тому

    thanks

  • @whiteboycarl1234
    @whiteboycarl1234 Місяць тому

    This is same intuition as slow fast pointers

  • @n_x1891
    @n_x1891 Рік тому

    Tortoise hare strikes again

  • @jeffsaremi
    @jeffsaremi 4 місяці тому

    You need to work on your rationale. Yes you reach the answer but it's not clear why.