Skip to content

Commit 04a93df

Browse files
committed
least common ancestor
1 parent 4a424e2 commit 04a93df

File tree

1 file changed

+53
-0
lines changed
  • Data-Structure/Tree/Binary Tree/LCA

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
'use strict';
2+
class Node {
3+
constructor(data) {
4+
this.data = data;
5+
this.leftNode = this.rightNode = null;
6+
}
7+
}
8+
9+
function LCA(root, data1, data2) {
10+
if (root == null) return null;
11+
if (root.data == data1 || root.data == data2) return root;
12+
let leftLCA = LCA(root.leftNode, data1, data2);
13+
let rightLCA = LCA(root.rightNode, data1, data2);
14+
if (leftLCA != null && rightLCA != null) return root;
15+
return leftLCA != null ? leftLCA : rightLCA;
16+
}
17+
18+
//level - 1
19+
let tree = new Node(1);
20+
21+
// level - 2
22+
tree.leftNode = new Node(2);
23+
tree.rightNode = new Node(3);
24+
25+
// level - 3
26+
tree.leftNode.leftNode = new Node(4);
27+
tree.leftNode.rightNode = new Node(5);
28+
29+
tree.rightNode.leftNode = new Node(6);
30+
tree.rightNode.rightNode = new Node(7);
31+
32+
// level - 4
33+
tree.leftNode.leftNode.leftNode = new Node(8);
34+
tree.leftNode.leftNode.rightNode = new Node(9);
35+
36+
tree.leftNode.rightNode.leftNode = new Node(10);
37+
tree.leftNode.rightNode.rightNode = new Node(11);
38+
39+
tree.rightNode.leftNode.leftNode = new Node(12);
40+
tree.rightNode.leftNode.rightNode = new Node(13);
41+
42+
tree.rightNode.rightNode.leftNode = new Node(14);
43+
tree.rightNode.rightNode.rightNode = new Node(15);
44+
// 1
45+
// / \
46+
// 2 3
47+
// / \ / \
48+
// 4 5 6 7
49+
// / \ / \ / \ / \
50+
// 8 9 10 11 12 13 14 15
51+
let k1 = 4, k2 = 10;
52+
let lcaNode = LCA(tree, k1, k2);
53+
console.log('LCA of ' + k1 + ' and ' + k2 + ' => ', lcaNode != null ? lcaNode.data : 0);

0 commit comments

Comments
 (0)