236. Lowest Common Ancestor of a Binary Tree
by samur3
JavaScript
/*let node3 = new TreeNode(4);
let node4 = new TreeNode(5);
let node1 = new TreeNode(2,node3,node4);
let node2 = new TreeNode(3);
let root = new TreeNode(1,node1,node2);*/
/*let node3 = new TreeNode(2);
let node1 = new TreeNode(1,undefined,node3);
let node2 = new TreeNode(3);
let root = new TreeNode(3,node1);*/
//[0,1,2,3,4,5]
//let arr = [-10,-3,0,5,9];
//let root = new TreeNode(1,null,null);
/*let node5 = new TreeNode(2);
let node3 = new TreeNode(2);
let node2 = new TreeNode(2,node5);
let node1 = new TreeNode(2,node3);
let root = new TreeNode(1,node1,node2);*/
//[5,4,1,null,1,null,4,2,null,2,null]
//let node6 = new TreeNode(2);
//[3,9,20,null,null,15,7]
//let node5 = new TreeNode(2);
let node8 = new TreeNode(4);
let node7 = new TreeNode(7);
let node6 = new TreeNode(2,node7,node8);
let node5 = new TreeNode(6);
let node4 = new TreeNode(8);
let node3 = new TreeNode(0);
let node2 = new TreeNode(1,node3,node4);
let node1 = new TreeNode(5,node5,node6);
let root = new TreeNode(-3,node1,node2);
let p = new TreeNode(5);
let q = new TreeNode(1);
//let target = 19.5;
/*var sortedArrayToBST = function(arr) {
let len = arr.length;
let middle = Math.floor(len / 2);
let root = new TreeNode(arr[middle]);
for(let i= middle+1; i < len; i++){
buildTree(root,arr[i]);
}
for(let j= 0; j < middle; j++){
buildTree(root,arr[j]);
}
return root;
}*/
var lowestCommonAncestor = function(root, p, q) {
p = p.val;
q = q.val;
if(p === root.val || q === root.val) return root;
let result = null;
let paths = [];
let path = new Array();
//get path that contains p and q
function helper(root,p,q,path){
if(!root) return;
if(root.right || root.left){
path.push(root.val);
}
if(!root.right && !root.left){
path.push(root.val);
paths.push([...path]);
}
helper(root.left,p,q,path);
helper(root.right,p,q,path);
path.pop();
}
...