माता-पिता सूचक का उपयोग किए बिना उत्तराधिकारी का पता लगाएं

वोट
1

एक BST में एक तत्व के उत्तराधिकारी inorder ट्रावर्सल द्वारा निर्धारित क्रमबद्ध क्रम में तत्व के उत्तराधिकारी है। उत्तराधिकारी ढूँढना जब प्रत्येक नोड अपनी मूल नोड के लिए एक सूचक है CLRS एल्गोरिथ्म पाठ्यपुस्तक (एमआईटी प्रेस द्वारा परिचय एल्गोरिदम के लिए) में प्रस्तुत किया है।

विचार यहाँ उत्तराधिकारी मिल रहा है - अगर नोड के सही सबट्री xअरिक्त है, के उत्तराधिकारी xसही सबट्री में न्यूनतम तत्व है। अन्यथा, उत्तराधिकारी का सबसे कम पूर्वज है xजिसका बाईं बच्चे को भी के एक पूर्वज है x(एक नोड संभालने खुद के एक पूर्वज है)।

हम माता पिता के नोड के लिए सूचक का उपयोग किए बिना उत्तराधिकारी मिल सकता है?

कभी-कभी हमारे पेड़ नोड इस सूचक नहीं है। मैं कुछ घंटों के लिए संघर्ष किया लेकिन सही कोड नहीं लिख सकते हैं।

26/09/2010 को 00:39
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


5 जवाब

वोट
0

आप माता-पिता नोड के लिए सूचक के लिए पहुँच नहीं है, तो आप को पता है, जो पिता है की जरूरत है। आप इसे नहीं जानते हैं, तुम कैसे पेड़ में जा सकते हैं?

26/09/2010 को 00:55
का स्रोत उपयोगकर्ता

वोट
2

यह काम करना चाहिए:

TREE-SUCCESSOR(T, x)
  if right[x] != NIL
    return TREE-MINIMUM(right[x])
  else
    return FIND-TREE-SUCCESSOR(root[T], x, NIL)

FIND-TREE-SUCCESSOR(y, x, c)
  if y = x
    return c
  if key[x] < key[y]
    return FIND-TREE-SUCCESSOR(left[y], x, y)
  else
    return FIND-TREE-SUCCESSOR(right[y], x, c)

FIND-TREE-SUCCESSORमें रहता है c(उम्मीदवार के) पिछले नोड जिसमें हम बाईं बदल गया।

26/09/2010 को 01:15
का स्रोत उपयोगकर्ता

वोट
5

शेल्डन के समाधान से प्रेरित होकर, इस समाधान की गैर पुनरावर्ती संस्करण है।


if (right[x]  != NIL)
    return min(right[x]);
else
{
    candidate = NIL;
    y = root; 
    while  (y!= x) // y is used as a probe
if (key[x] < key[y]) { candidate = y; y = y ->left;
} else y = y->right; } return candidate;
यदि उम्मीदवार == शून्य, एक्स पेड़ में अधिकतम है और एक उत्तराधिकारी नहीं है।

26/09/2010 को 18:17
का स्रोत उपयोगकर्ता

वोट
1

मैं यहाँ माता पिता सूचक के बिना इन-आदेश उत्तराधिकारी के लिए एक सुरुचिपूर्ण समाधान पाया -> http://www.geeksforgeeks.org/archives/9999

आइडिया है

1. यदि नोड सही उप पेड़ है, तो उसके उत्तराधिकारी सही उप पेड़ में कम से कम तत्व है

  1. तो नोड के अधिकार उप पेड़ खाली है, तो उसके उत्तराधिकारी अपने पूर्वजों, पाया जा सकता है निम्नलिखित कलन विधि के साथ माता-पिता सूचक के बिना ऊपर से नीचे, में से एक है:

शुरू में जड़ हो current_node करते हैं, succ_node = बातिल;

case1: - current_node में जगह succ_node और बायीं नोड के लिए ले जाने के current_node (क्योंकि खोज तत्व बाईं सबट्री में है) तो खोज तत्व current_node से कम है, तो मौजूदा तत्व एक संभावित उत्तराधिकारी है

case2: खोज तत्व अधिक से अधिक तो current_node है, तो इसकी नहीं एक संभावित उत्तराधिकारी (कैसे एक कम तत्व उत्तराधिकारी हो सकता है?)। तो यहाँ succ_node जगह करने की कोई जरूरत है, लेकिन सही करने के लिए current_node चलते हैं।

प्रक्रिया को दोहराते या रखना जब तक आप अशक्त तक पहुँचने के तत्व ही है और succ_node लौट आते हैं।

13/09/2012 को 01:17
का स्रोत उपयोगकर्ता

वोट
0

एक पुनरावर्ती जावा समाधान निम्नलिखित तरीके से दे सकता है:

public Integer successor(Integer value) {
    Node n = succ(root, value, null);
    if (null != n) {
       return n.value;
    }
    return null;
}

private Node succ(Node n, Integer x, Node p) {
    if (null == n) {
        return null;
    }

    if (x < n.value) {
        return succ(n.left, x, n);
    } else if (x > n.value) {
        return succ(n.right, x, p);
    }
    if (null != n.right) {
        return min(n.right);
    }
    return p;
}

एक ग्राहक के रूप में हम बस नोड जिससे हम उत्तराधिकारी जानना चाहता हूँ के मूल्य में गुजरती हैं। फिर हम जब तक हम मूल्य हम देख रहे थे पाया जड़ से खोज शुरू। अब दो मामलों रहे हैं:

  1. वर्तमान नोड एक सही बच्चे, तो उत्तराधिकारी वर्तमान नोड के अधिकार सबट्री में सबसे छोटा तत्व है
  2. अन्यथा, यह नोड पी (मूल सूचक) है, जो केवल अद्यतन किया गया था जब हम वृक्ष के भीतर छोड़ दिया गया था
09/09/2013 को 17:41
का स्रोत उपयोगकर्ता

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