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