diff --git a/problems/lowest-common-ancestor-of-a-binary-search-tree.kt b/problems/lowest-common-ancestor-of-a-binary-search-tree.kt new file mode 100644 index 0000000..b999733 --- /dev/null +++ b/problems/lowest-common-ancestor-of-a-binary-search-tree.kt @@ -0,0 +1,37 @@ +/** + * Definition for a binary tree node. + * class TreeNode(var `val`: Int = 0) { + * var left: TreeNode? = null + * var right: TreeNode? = null + * } + */ + +class Solution { + fun lowestCommonAncestor(root: TreeNode?, p: TreeNode?, q: TreeNode?): TreeNode? { + var ancestor: TreeNode? = null + var pTrack = root + var qTrack = root + + while (pTrack == qTrack && pTrack != null && qTrack != null) { + ancestor = pTrack + + if (pTrack!!.`val` == p!!.`val`) { + return p + } else if (p!!.`val` < pTrack!!.`val`) { + pTrack = pTrack.left + } else { + pTrack = pTrack.right + } + + if (qTrack!!.`val` == q!!.`val`) { + return q + } else if (q!!.`val` < qTrack!!.`val`) { + qTrack = qTrack.left + } else { + qTrack = qTrack.right + } + } + + return ancestor + } +}