Lowest Common Ancestor of a Binary Search Tree - Leetcode 235 - Python

Поділитися
Вставка
  • Опубліковано 24 сер 2024

КОМЕНТАРІ • 177

  • @NeetCode
    @NeetCode  3 роки тому +18

    🚀 neetcode.io/ - I created a FREE site to make interview prep a lot easier, hope it helps! ❤

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

      you're assuming the tree is a binary search tree, what about binary trees that are not search trees? and what about non binary trees?

  • @siddharthkapoor3867
    @siddharthkapoor3867 2 роки тому +159

    IDK WHY YOU STARTED THIS CHANNEL BUT THIS IS A BLESSING FOR people like me. THANK YOU SO MUCH !

    • @leeroymlg4692
      @leeroymlg4692 Рік тому +23

      He is single handedly starting thousands of careers

  • @vladimirstrigunov7412
    @vladimirstrigunov7412 2 роки тому +101

    You are one really rare talented teacher!

  • @prafulparashar9849
    @prafulparashar9849 2 роки тому +76

    This code simplicity is God-level !!
    Dude, I went like, this is it??
    Then, I realized that this was actually it.

  • @jaminchung341
    @jaminchung341 Рік тому +22

    You have a talent for making me feel like I overcomplicate things. Thank you for this solution and all the videos you make, your talent at problem-solving and teaching is godly.

  • @wtcxdm
    @wtcxdm Рік тому +16

    This is one of the questions that I stared for a long time but understood it immediately after half of the video. Thanks for the great explanation as always.

  • @chengjacky6460
    @chengjacky6460 Рік тому +18

    Amazing video, kindly remind this is for Leetcode 235 instead of 236. One is for binary tree (unsorted), the other is for binary search tree (sorted)

    • @asdasdf3874
      @asdasdf3874 Рік тому +1

      Lmao I was on 236 thinking why nothing works

  • @michaelgranger3293
    @michaelgranger3293 Рік тому +6

    For anyone like me confused by him comparing the values of the nodes, a bst is organized so that child nodes on the left are less than the parent node, and child nodes on the right are greater than the parent node. This applies recursively for any node with children.

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

      Was looking for this. Thanks!

  • @debkumarmishra1426
    @debkumarmishra1426 2 роки тому +13

    This test case is failing in leetcode -
    [3,5,1,6,2,0,8,null,null,7,4]
    5
    4

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

      what to do bro

    • @jakjun4077
      @jakjun4077 Рік тому +1

      Only works on bst that guarantee to have p and q in it self not not normal binary tree

    • @paris-panda
      @paris-panda 8 місяців тому

      @@jakjun4077 Unless I'm misreading it, both 4 and 5 should both be in the left branch from the starting node of 3... Hmmmm....

  • @sandeepreddysomu2603
    @sandeepreddysomu2603 3 роки тому +54

    Time Complexity will be O(n) in the worst possible case of tree being left skewed or right skewed.
    Anyway as always awesome explanation bro.

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

      I was also about to type that :)

    • @Marcelo-yp9uz
      @Marcelo-yp9uz 2 роки тому +5

      Still O(h)

    • @studyaccount794
      @studyaccount794 2 роки тому +2

      But isn't that the same as O(h) where h is n?? So technically O(h) is the more correct solution because in the case you mentioned where it's O(n) it's also O(h).

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

      But isn't a Binary Search Tree non-skewed unless stated?

  • @kuoyulu6714
    @kuoyulu6714 11 місяців тому +6

    After an hour, I finally did a O(n) solution, and i check NeetCode's video: 6 mins
    Me : ...

  • @harry5094
    @harry5094 2 роки тому +13

    My mind was blown after seeing your solution. Thanks my man!

    • @HarimaKentaro
      @HarimaKentaro 2 роки тому +2

      ya, same here :P i was overthinking it and completely went over the fact that this was a BST even though it said so explicitly lool

  • @romilrathi5940
    @romilrathi5940 10 місяців тому +2

    I have become substantial better in coding and solving difficult problems thanks to your channel. Keep it up!

  • @robinrpr
    @robinrpr 2 роки тому +6

    This solution has totally threw me off after realizing that we can make use of the nature of a binary search tree. I need to take a closer look at binary trees structure next time

  • @noelcovarrubias7490
    @noelcovarrubias7490 2 роки тому +7

    I came up with the "solution" where I was checking if the node's value was one of the 2 given nodes and if not, I would go either left or right until I would find the solution. Your explanation was so much better, and it makes total sense. I've been wanting to ask; how did you get good at this? Are there any books you would recommend?

  • @rileykirkham9690
    @rileykirkham9690 2 роки тому +3

    Dang that's such an easy solution. Here I was thinking I would find the paths to both p and q and see where the paths differed, but no. This is way better!

  • @FANSasFRIENDS
    @FANSasFRIENDS 2 роки тому +2

    After seeing your solution, it didn't took me a minute to solve this problem in c++, Really very nice, keep going.

  • @ms3801
    @ms3801 Рік тому +1

    This question made my brain hurt a bit, so glad you were here to explain this for all of us! Just wanted to express my gratitude love the way you kind of do an overall explanation before you code.

  • @solodolo42
    @solodolo42 8 місяців тому

    Reminds me of the lowest common multiple (LCM) from math. You stop when a number cannot divide all the remainders at the same time. Thank you bro!

  • @stephennjuguna3793
    @stephennjuguna3793 5 місяців тому +1

    Wow! I had overcomplicated the solution for this. Thanks.

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

    You are one of the best people who can explain programming problems.

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

    It's amazing how simple and straightforward your solution is!

  • @hayatof1
    @hayatof1 Рік тому +2

    Hello. Loving all these videos and the neetcode website (even though I am learning very slowly). Just an update, this problem on Leetcode is being listed as a Medium now and not Easy anymore.
    Actually just saw the entire video and....what!? How did you....wow this one just blew my mind.

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

    i honestly don't know what i would do without you, neetcode

  • @ethangordon3935
    @ethangordon3935 8 місяців тому

    Wow that was way easier than I was making it. I didn't think about A) doing it iteratively or B) simply returning root if you have to split directions like that. I guess I didn't fully understand the problem. Thank you!

  • @johnqu1t
    @johnqu1t 9 місяців тому +1

    Man, your solutions always manage to impress me

  • @davegeraghty2187
    @davegeraghty2187 5 місяців тому +2

    is this still valid? the leetcode 236 example doesnt seem to structure the trees in the way you describe with right descendants being greater than the root

  • @sailormetz7148
    @sailormetz7148 Рік тому +4

    Thanks for the explanation. However, I'm confused on how 6 isn't the LCA for 7 and 9 in the second example. I must be missing something in the definition of LCA, because 6 is lower than 8 and has both 7 and 9 as descendants...

    • @leeroymlg4692
      @leeroymlg4692 Рік тому +5

      it's not the 'lowest' value, but the lowest node on the tree. 8 is below 6 on the tree

    • @ladydimitrescu1155
      @ladydimitrescu1155 Рік тому +1

      @@leeroymlg4692 even i was confused thanks for the clarification !

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

    coincidence! exactly after one year of upload seeing this video.! Big respect for you.!

  • @aaditya_87
    @aaditya_87 Рік тому +2

    28/30 cases passed

  • @art4eigen93
    @art4eigen93 2 роки тому +3

    Neet: "So I am gonna complete the solution in just 3 lines fellas"

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

    Damn, I never knew this problem can be solved this way. Mind blown. Great approach. Thank you!

  • @danielsun716
    @danielsun716 Рік тому +1

    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
    def dfs(root):
    if p.val < root.val and q.val < root.val:
    return dfs(root.left)
    if p.val > root.val and q.val > root.val:
    return dfs(root.right)
    return root
    return dfs(root)

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

      this is what i was looking for thanks!!😁
      I simplified it further
      def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
      if p.valroot.val:
      return self.lowestCommonAncestor(root.right,p,q)
      return root

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

    I made this massively more complicated for myself by ignoring the constraint that confirmed `p` and `q` will exist in the list.
    This becomes much more complicated if you're having to binary search for nodes, then traverse back up to find the first common ancestor of both.

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

    Thank you so much! Please keep updating leetcode solutions! Your videos really help me a lot!! Great appreciate!

  • @Jamal-code
    @Jamal-code 10 місяців тому

    @NeetCode 4:59 I think the time complexity is O(n) because the BST isn’t necessarily balanced

  • @user-kf5uz6rw4w
    @user-kf5uz6rw4w 5 місяців тому

    Oh Wow interesting to see that not every tree question requires a recursion solution. Neat!

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

    Recursive solution:
    if (p.val = root.val) or ((p.val >= root.val and q.val

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

    Here is the Java equivalent for those who are wondering:
    class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    TreeNode current = root;
    while(true) {
    if(p.val > current.val && q.val > current.val) {
    current = current.right;
    }
    if(p.val < current.val && q.val < current.val) {
    current = current.left;
    }
    else {
    return current;
    }
    }
    }
    }

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

    Very neat solution and excellent explanation

  • @viceroyop6385
    @viceroyop6385 2 роки тому +2

    Simple recursive method given the leetcode constraints, you could do this without declaring low/high/res but I include them for clarity
    low = min(p.val, q.val)
    high = max(p.val, q.val)
    res = root.val
    # LCA because going left subtree leaves out high, right subtree leaves out low
    if low = res:
    return root
    elif res > low and res > high:
    return self.lowestCommonAncestor(root.left, p, q)
    elif res < low and res < high:
    return self.lowestCommonAncestor(root.right, p, q)

  • @tamchuminh7022
    @tamchuminh7022 Рік тому +3

    I think a more intuitive solution is that you could record all the nodes when traversing from root to p in an array, and all the nodes to q in other array, then find the common node in these 2 arrays.

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

    recursive solution:
    class Solution:
    def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:
    if p.val < root.val and q.val < root.val:
    return self.lowestCommonAncestor(root.left, p, q)
    elif p.val > root.val and q.val > root.val:
    return self.lowestCommonAncestor(root.right, p, q)
    else:
    return root

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

    Amazing!! Thank you NeetCode

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

    Thank you so much dude!!!

  • @namoan1216
    @namoan1216 2 роки тому +5

    Is it possible to solve this prob using recursion?

    • @elgizabbasov1963
      @elgizabbasov1963 2 роки тому +6

      if root.val < p.val and root.val < q.val:
      return self.lowestCommonAncestor(root.right, p, q)

      elif root.val > p.val and root.val > q.val:
      return self.lowestCommonAncestor(root.left, p, q)

      else:
      return root

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

      @@elgizabbasov1963 Would this then be O(N) space because of the call stack?

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

      @@toni9595 yes worst case O(n) average O(log n)

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

    there seem to be very little number of cases in the problem to realize, well done!

  • @julesrules1
    @julesrules1 11 місяців тому

    Thank you for the neat explanation. And the code as well.

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

    Thanks NeetCode!
    I think i wrote a little easier solution after watching your video explanation before watching coding part.

  • @deepaligarg2978
    @deepaligarg2978 2 роки тому +2

    This solution is not working
    This is the below code I used following the video. But it does not pass all test cases. Please let me know if I missed something.
    var lowestCommonAncestor = function (root, p, q) {
    if (!root) return null;
    let curr = root;
    while (curr) {
    if (p.val < curr.val && q.val < curr.val) curr = curr.left;
    else if (p.val > curr.val && q.val > curr.val) curr = curr.right;
    else return curr;
    }
    };

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

      Everything seems fine. I tried your exact code in leetcode, it passed

    • @cici-lx6np
      @cici-lx6np 2 роки тому +9

      I saw other comments say that this solution is for leetcode 235 instead of 236. The difference between 235 and 236 is that
      235 is Binary Search Tree
      236 is Binary Tree.
      Hope this could help :)

    • @yashwanthsai762
      @yashwanthsai762 Рік тому +1

      @@cici-lx6np tnx i was scratching my head

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

    Grateful to your work

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

    Simple and effective solution !

  • @arunagiriswarane1155
    @arunagiriswarane1155 3 роки тому +1

    @neetcode can u discuss tower of hanoi problem. I think it helps us to set a base for recursive problem.

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

    Good explanation. Thanks.

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

    Great video as always! Can you also solve lowest common ancestor of a binary tree please?

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

    OMG! I'm so mad at myself I didn't see it.
    What a brilliant solution

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

    Wow great simple solution

  • @mightyprogrammer2899
    @mightyprogrammer2899 8 місяців тому

    Here is the code, u can run with your offline python environment
    class TreeNode:
    def __init__(self, x):
    self.val = x
    self.left = None
    self.right = None
    class BinarySearchTreeNode:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
    cur = root

    while cur:
    if p.val > cur.val and q.val > cur.val:
    cur = cur.right
    elif p.val < cur.val and q.val < cur.val:
    cur = cur.left
    else:
    return cur
    # Helper function to build a BST from a list
    def buildBST(nums):
    if not nums:
    return None
    root = TreeNode(nums[0])
    for num in nums[1:]:
    if num is not None:
    root = insert(root, num)
    return root
    # Helper function to insert a value into a BST
    def insert(root, val):
    if not root:
    return TreeNode(val)

    if val < root.val:
    root.left = insert(root.left, val)
    else:
    root.right = insert(root.right, val)

    return root
    if __name__ == "__main__":
    solution = BinarySearchTreeNode()
    nums_1 = [6, 2, 8, 0, 4, 7, 9, None, None, 3, 5]
    p_val_1, q_val_1 = 2, 8
    root1 = buildBST(nums_1)
    p1 = TreeNode(p_val_1)
    q1 = TreeNode(q_val_1)
    result1 = solution.lowestCommonAncestor(root1, p1, q1)
    print(result1.val)
    nums_2 = [6, 2, 8, 0, 4, 7, 9, None, None, 3, 5]
    p_val_2, q_val_2 = 2, 4
    root2 = buildBST(nums_2)
    p2 = TreeNode(p_val_2)
    q2 = TreeNode(q_val_2)
    result2 = solution.lowestCommonAncestor(root2, p2, q2)
    print(result2.val)
    nums_3 = [2, 1]
    p_val_3, q_val_3 = 2, 1
    root3 = buildBST(nums_3)
    p3 = TreeNode(p_val_3)
    q3 = TreeNode(q_val_3)
    result3 = solution.lowestCommonAncestor(root3, p3, q3)
    print(result3.val)

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

    So is there some sort of official binary tree definition I can find? Isn't there a few presuppositions that are being made that make this problem easier? For one why does:
    TreeNode.left

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

      this is binary SEARCH tree. Loot at the definition of that tree

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

    Wish you also solved the other (lowest common ancestor) binary tree problems. They are 4 of them.

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

    thanks for the explanation of the question but now this question its medium not easy

  • @alexgrossbard6206
    @alexgrossbard6206 Рік тому +6

    The problem was changed so it's a binary tree but not a binary search tree, so this solution no longer works.

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

      That's a diff problem, the BST one still exists

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

    Why I am getting wrong answer for this Input with code below:
    [3,5,1,6,2,0,8,null,null,7,4]
    5
    4
    Output : null
    Expected : 5
    ---------------------------------------- Code ----------------------------------------------------
    class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':

    cur = root
    while cur:

    if p.val > cur.val and q.val > cur.val:
    cur = cur.right
    elif p.val < cur.val and q.val < cur.val:
    cur = cur.left
    else:
    return cur

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

    Really helpful! Thank you!

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

    Really awesome, thank you!

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

    can someone explain why the second if statement has to be an else if? i feel like, logically, it doesnt matter since we are going down the tree regardless.
    while root:
    if p.val < root.val and q.val < root.val:
    root = root.left
    if p.val > root.val and q.val > root.val:
    root = root.right
    else:
    return root

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

      Yes it doesn't matter for the solution but regardless the compiler will evaluate the second "if" statement even if the first "if" statement is true. When we use "elseIf" the compiler will not evaluate any other condition if one of the condition is true

  • @asrahussain8642
    @asrahussain8642 Рік тому +1

    what if it's not a BST??

  • @scotttang3646
    @scotttang3646 8 місяців тому

    I tried just use root instead of cur, it still works.

  • @sucraloss
    @sucraloss 11 місяців тому

    Damnit I solved this using DP and felt good until I saw your insanely short and intuitive solution.
    I basically created a path to each node, popped values off the longer path and compared to the top of the shorter path until the path lengths were equal. When they were I popped off each value and compared and as soon as they were equal I returned the node where it was equal.

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

    I didnt realize a binary search tree was sorted at first, and spent one hour trying to do bfs search lol

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

    using recursion wouldnt the space complexity be O(logn) since the callstack will at most have logn recursive calls at a time?

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

      This is not recursion, it's just a loop.
      You can also do
      while(true) {
      }
      and the solution will still work as we are guaranteed to find p and q

  • @SarahSalvatore-ve6gf
    @SarahSalvatore-ve6gf Рік тому +1

    This no longer works for question 235

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

    Love from Suman(IIT-Bhubaneshwar, odisha India

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

    thank you sir

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

    Thanks man, liked

  • @radhikashroff2643
    @radhikashroff2643 3 роки тому +4

    Hi , looks like this solution is not getting accepted for me,
    curr = root
    while curr:
    if p.val > curr.val and q.val > curr.val:
    curr = curr.right
    elif p.val < curr.val and q.val < curr.val:
    curr = curr.left
    else:
    return curr
    Thanks

    • @albertjtyeh53
      @albertjtyeh53 3 роки тому +1

      Hi @radhika i think you are looking at 235 not 236.

    • @staazbeats
      @staazbeats 3 роки тому +1

      Yeah it’s saying wrong answer for me too, but it passes the first test case

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

      same for me; does not pass in c++. First TC passes though.
      TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
      TreeNode *cur = root;

      while (cur) {
      if (cur->left && p->val < root->val && q->val < root->val) {
      cur = cur->left;
      } else if (cur->right && p->val > root->val && q->val > root->val) {
      cur = cur->right;
      } else {
      return cur;
      }
      }
      return nullptr;

      }

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

      Works for me in C#

    • @son0funiverse
      @son0funiverse 2 роки тому +2

      Yeah, it didn't work for me too.

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

    elegant solution, even without any recursion! why is the solution on your github more complex?

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

      I am not 100% as I couldn't understand what the self.res was, assuming it's just a variable to store the result. But, looks like his solution in github will work against any tree and not just BST. I could be wrong XD

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

    God like explanation!

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

    Hi. By this algorithm, wouldn't a case where p = 0 and q = 5 return an answer of 0. Shouldn't the answer be 2 as 0 is not an ancestor of 5?

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

      I think you are misunderstanding something here. When root is 2 (firstroot.left) then 0< 2 but 5>2 so root will be returned i.e. 2. I don't understand how you see 0 being returned.

  • @shanshanyu5954
    @shanshanyu5954 3 роки тому +4

    Thanks!

    • @NeetCode
      @NeetCode  3 роки тому +3

      Hey Shanshan - thank you so much, I really appreciate it!! 😊

    • @shanshanyu5954
      @shanshanyu5954 3 роки тому +10

      @@NeetCode Sorry, I only have a little money, I really appreciated your work but the amount can't represent my thanks. As a video maker, I know making video is a time consuming process. Your video helps me a lot. If I can find a full time job, I will donate more. Thanks for you sharing, your videos are better than many paid courses that I had before!

    • @MIDNightPT4
      @MIDNightPT4 2 роки тому +3

      @@shanshanyu5954 Its the thought that counts!

  • @nikhildinesan5259
    @nikhildinesan5259 3 роки тому

    just a suggestion can you make video on task scheduler problem too ?

  • @user-hf8iy8xp9y
    @user-hf8iy8xp9y 10 місяців тому

    you said that the space complexity is O(1) but shouldn't it be O(h) where h = height of the tree? Because we are using the call stack for the recursive calls.

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

      There is no call stack in the solution given, there is a pointer to the current node being held which is constantly updated. This approach is iterative. For a recursive solution, you are correct.

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

      To your point this could easily be done recursively which is what I did as well:
      class Solution {
      public:
      TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
      if (p->val > root->val && q->val > root->val)
      {
      return lowestCommonAncestor(root->right, p, q);
      }
      else if (p->val < root->val && q->val < root->val)
      {
      return lowestCommonAncestor(root->left, p, q);
      }
      else
      {
      return root;
      }
      }
      };

  • @DaMavrk
    @DaMavrk 7 місяців тому +2

    how is this medium but subtree of another tree easy? lol

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

    very clever

  • @ben2258
    @ben2258 28 днів тому

    Anyone know why my solution to this problem might be passing on LeetCode but failing on NeetCode?

  • @phamthienank14hcm30
    @phamthienank14hcm30 8 днів тому

    THE GOAT

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

    Is this still considered a DFS approach?

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

    What software or app do you use to get these videos done? Like is that apple pencil on ipad? @neetcode

  • @sunginjung3854
    @sunginjung3854 3 роки тому

    thank you

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

    This solution no longer works guys. They changed up the ordering of the nodes

    • @KiingDom
      @KiingDom 3 місяці тому

      the idea of the solution is still the same. you just need to terminate the loop with a break statement within the else case. then you can return the result outside the loop

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

      @@KiingDom does not work

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

      @@manh9105 idk it worked for me

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

    and here i was writing 5 different functions for no reason

  • @demaxl732
    @demaxl732 8 місяців тому

    I didnt even notice the fact that is was a BST and I solved it using recursion like a regular BT😂

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

    Should have mentioned straight away that p and q will exist and that p!=q like in the problem. Went too quickly over this one

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

    Thanks @Neetcode!! A potential follow up is : what is p and q may not exist in the tree, how would you modify the code? Really appreciate if you could share your thoughts here.

  • @TomerBenDavid
    @TomerBenDavid 3 роки тому

    Hey can you say please which drawing tools you use there and which mic and recording software - Affiliate links would happily be clicked to support you! Thanks..

    • @NeetCode
      @NeetCode  3 роки тому +3

      Sure, this is the mic I use: amzn.to/2RRrLQd
      And I just use Paint3D for the drawings with a mouse.

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

    Spent aprox. two hours trying to get a DFS or BFS implementation for this problem...and the answer is a few conditional loops, typical

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

    are binary trees always like this? such that values on the left are lower and right are higher?

    • @wfkpk
      @wfkpk 11 місяців тому

      Yes your understanding is correct.
      root value will be greater than left and less than right.

    • @matthewsaucedo2471
      @matthewsaucedo2471 11 місяців тому

      @@wfkpk No, this is not correct. Binary SEARCH Trees are always like this. A plain old Binary Tree has no such guarantee.

    • @matthewsaucedo2471
      @matthewsaucedo2471 11 місяців тому

      And even then, you should always try and be clear if the BST allows duplicates and how that shakes out for the left/right sorting.

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

    Bruh, neat! Or should I say neet!

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

    why have we assigned a CURR value to the root, cant we use root directly in for loop?if any body know kindly drop your aws

    • @austin4855
      @austin4855 2 роки тому +2

      you could, but then you'd be reassigning root to the next node on each step of the loop. when you were done, root, one of your parameters, would no longer point to the original root of the tree. what if the code that called your function was relying on the root variable they passed to you? reassigning parameters is an anti-pattern except when the function explicitly makes clear that that is the intention (referred to as modifying in-place). also, since curr here is just a pointer/reference to the object and not a copy of the tree itself, it costs basically nothing to make that variable and preserve the original root parameter

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

      @@austin4855 thanks dude

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

      @@austin4855 thanks dude

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

      @@austin4855 okay seriously this guy is built different

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

    This test case is failing in leetcode -
    [3,5,1,6,2,0,8,null,null,7,4]
    5
    4
    Anyone have any clue, why?

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

      May be the test case itself is wrong. Input doesn't make much sense as it isn't a valid BST, value 1 can't be to right side of value 3 as it was supposed to be a BST... for example a valid input BST would be something like [3,1,5,0,2,4,7, ...] , which would look like
      3
      1 5
      0 2 4 7
      :
      ? Hope that helps .

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

      Hey @@rockstars369
      Thanks for clarifying, yes this does make a lot of sense now. I was doing this for a Binary tree, which is valid in this case and might have some more cases to consider other than the approach mentioned in the video which is of BST.