From e10a91354678923d7d7137fb5d30241a3b1e1a6b Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Thu, 3 Sep 2026 14:17:51 -0400 Subject: [PATCH] =?UTF-8?q?docs(docs):=20add=20236=E2=80=AFLowest=20Common?= =?UTF-8?q?=20Ancestor=20of=20a=20Binary=20Tree=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...owest-common-ancestor-of-a-binary-tree.mdx | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 apps/docs/content/(tree)/236-lowest-common-ancestor-of-a-binary-tree.mdx diff --git a/apps/docs/content/(tree)/236-lowest-common-ancestor-of-a-binary-tree.mdx b/apps/docs/content/(tree)/236-lowest-common-ancestor-of-a-binary-tree.mdx new file mode 100644 index 0000000..3c30213 --- /dev/null +++ b/apps/docs/content/(tree)/236-lowest-common-ancestor-of-a-binary-tree.mdx @@ -0,0 +1,62 @@ +--- +title: '236. Lowest Common Ancestor of a Binary Tree' +description: Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree +sidebar: + label: 'Lowest Common Ancestor of a Binary Tree' + badge: 'Medium' +--- + +Tree DFS + +### Example 1: +- Input: `root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1` +- Output: `3` +- Explanation: The LCA of nodes `5` and `1` is `3`. + +### Example 2: +- Input: `root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4` +- Output: `5` +- Explanation: The LCA of nodes `5` and `4` is `5`, since a node can be a descendant of itself according to the LCA definition. + +### Example 3: +- Input: `root = [1,2], p = 1, q = 2` +- Output: `1` + +### Constraints: + +- The number of nodes in the tree is in the range [2, 10^5]. +- `-10^9 <= Node.val <= 10^9` +- All Node.val are unique. +- `p != q` +- p and q will exist in the tree. + +## Solution + +```py +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + + +class Solution: + def lowestCommonAncestor( + self, root: "TreeNode", p: "TreeNode", q: "TreeNode" + ) -> "TreeNode": + + if not root: + return None + + if root == p or root == q: + return root + + l = self.lowestCommonAncestor(root.left, p, q) + r = self.lowestCommonAncestor(root.right, p, q) + + if l and r: + return root + else: + return l or r +```