/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {TreeNode} p
 * @param {TreeNode} q
 * @return {TreeNode}
 */
var lowestCommonAncestor = function(root, p, q) {
	let la = null
	const traversal = function(root, p, q) {
		let set1 = [], set2 = []
		if (root.left !== null) set1 = traversal(root.left, p, q)
		if (root.right !== null) set2 = traversal(root.right, p, q)
		let set3 = new Set([...set1, ...set2])
		if (root === p || root === q) set3.add(root)
		if (set3.has(p) && set3.has(q)) { la = root; return [] }
		return set3
	}
	traversal(root, p, q)
	return la
}