एक द्विआधारी खोज वृक्ष में सबसे कम आम पूर्वज

वोट
2

इसके बहुत आसान एक BST में निकटतम आम पूर्वज लगाना चाहते हैं कि सभी तत्वों को अलग कर रहे हैं। लेकिन क्या मूल्यों के कुछ ही रहे हैं। अब तक हम सिर्फ नोड्स के डेटा की तुलना कर रहे थे और यह है कि यह था, लेकिन अब हम सिर्फ मान के स्थान पर नोड्स 'पते के लिए जाँच करने के लिए की जरूरत है?

06/08/2011 को 11:25
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
1

हाँ, बजाय बस का उपयोग करने के अपने keyतुलना के लिए, का उपयोग (key, address of node)तुलना के लिए। जब गैर-अद्वितीय कुंजी के साथ काम कर इस कोड को सरल करता है।

06/08/2011 को 11:31
का स्रोत उपयोगकर्ता

वोट
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;
    }
}
06/08/2011 को 11:41
का स्रोत उपयोगकर्ता

वोट
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
05/09/2014 को 07:17
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more