236.lowest-common-ancestor-of-a-binary-tree.js 698 B

123456789101112131415161718192021222324252627
  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val) {
  4. * this.val = val;
  5. * this.left = this.right = null;
  6. * }
  7. */
  8. /**
  9. * @param {TreeNode} root
  10. * @param {TreeNode} p
  11. * @param {TreeNode} q
  12. * @return {TreeNode}
  13. */
  14. var lowestCommonAncestor = function(root, p, q) {
  15. let la = null
  16. const traversal = function(root, p, q) {
  17. let set1 = [], set2 = []
  18. if (root.left !== null) set1 = traversal(root.left, p, q)
  19. if (root.right !== null) set2 = traversal(root.right, p, q)
  20. let set3 = new Set([...set1, ...set2])
  21. if (root === p || root === q) set3.add(root)
  22. if (set3.has(p) && set3.has(q)) { la = root; return [] }
  23. return set3
  24. }
  25. traversal(root, p, q)
  26. return la
  27. }