इसके बहुत आसान एक BST में निकटतम आम पूर्वज लगाना चाहते हैं कि सभी तत्वों को अलग कर रहे हैं। लेकिन क्या मूल्यों के कुछ ही रहे हैं। अब तक हम सिर्फ नोड्स के डेटा की तुलना कर रहे थे और यह है कि यह था, लेकिन अब हम सिर्फ मान के स्थान पर नोड्स 'पते के लिए जाँच करने के लिए की जरूरत है?
एक द्विआधारी खोज वृक्ष में सबसे कम आम पूर्वज
वोट
2
3 जवाब
वोट 1
1
हाँ, बजाय बस का उपयोग करने के अपने keyतुलना के लिए, का उपयोग (key, address of node)तुलना के लिए। जब गैर-अद्वितीय कुंजी के साथ काम कर इस कोड को सरल करता है।
वोट 0
0
struct प्रयोग कर रहे हैं किस तरह देखकर बिना, यह बारीकियों देने के लिए मुश्किल है, लेकिन आप इस स्यूडोकोड की तरह कुछ की कोशिश कर सकते:
struct BST {
struct BST* parent;
struct BST* left;
struct BST* right;
void* value;
}
find_common_ancestor(struct BST* x, struct BST* y)
{
set<struct BST*> ancestors;
// Add all of x's ancestors to set.
while (true) {
ancestors.insert(x);
if (x == NULL)
break;
x = x=>parent;
}
// Check y's ancestors against x's until a match is found.
while (true) {
if (ancestors.count(y) > 0)
return y;
y = y->parent;
}
}
वोट 0
0
यहाँ psudocode है। सिर्फ उन्हें वाक्य रचना में तब्दील।
GETLeastCommonAn(BINARYTREE BT, NODE A, NODE B)
IF Root==NIL
return NIL
ENDIF
IF Root==A OR root==B
return Root
ENDIF
Left = GETLCA (Root.Left, A, B)
Right = GETLCA (Root.Right, A, B)
IF Left! = NIL AND Right! = NIL
return root
ELSEIF Left! = NIL
Return Left
ELSE
Return Right
ENDIF













