यहां एक समाधान है जो आपको केवल एक इनपुट पैरामीटर - नोड की नई बाईं स्थिति (newpos) के साथ पेड़ में किसी भी स्थिति में नोड को स्थानांतरित करने देता है।
मूल रूप से तीन सेट हैं:
- सबट्री के लिए नया स्थान बनाएं।
- सबट्री को इस स्पेस में ले जाएं।
- उप-वृक्ष द्वारा खाली किए गए पुराने स्थान को हटा दें।
psuedo-sql में, यह इस तरह दिखता है:
//
* -- create new space for subtree
* UPDATE tags SET lpos = lpos + :width WHERE lpos >= :newpos
* UPDATE tags SET rpos = rpos + :width WHERE rpos >= :newpos
*
* -- move subtree into new space
* UPDATE tags SET lpos = lpos + :distance, rpos = rpos + :distance
* WHERE lpos >= :tmppos AND rpos < :tmppos + :width
*
* -- remove old space vacated by subtree
* UPDATE tags SET lpos = lpos - :width WHERE lpos > :oldrpos
* UPDATE tags SET rpos = rpos - :width WHERE rpos > :oldrpos
*/
:distance वेरिएबल नए और पुराने पदों के बीच की दूरी है, :चौड़ाई सबट्री का आकार है, और :tmppos का उपयोग अपडेट के दौरान स्थानांतरित किए जा रहे सबट्री का ट्रैक रखने के लिए किया जाता है। इन चरों को इस प्रकार परिभाषित किया गया है:
// calculate position adjustment variables
int width = node.getRpos() - node.getLpos() + 1;
int distance = newpos - node.getLpos();
int tmppos = node.getLpos();
// backwards movement must account for new space
if (distance < 0) {
distance -= width;
tmppos += width;
}
एक संपूर्ण कोड उदाहरण के लिए, मेरा ब्लॉग देखें
https://rogerkeays.com/how -टू-मूव-ए-नोड-इन-नेस्टेड-सेट्स-साथ-एसक्यूएल
अगर आपको यह समाधान पसंद आया हो, तो कृपया अप-वोट करें।