የሁለትዮሽ ዛፍ ኢትሬቴሪያል ኢንደር ትራቨር  


የችግር ደረጃ መካከለኛ
ሁለትዮሽ ዛፍ የዛፍ ተሻጋሪ

በ “ሁለትዮሽ ዛፍ ኢተሬቲካል ኢንደር ትራቬርስ” ችግር ውስጥ ሀ ባለ ሁለትዮሽ ዛፍ Inorder in ፋሽንን ማለፍ ያስፈልገናል “በተከታታይ”, ያለ ድግግሞሽ.

ለምሳሌ  

                 2

              /     \

            1         3

          /   \

        4       5                

4 1 5 2 3
           1 
 
         /    \

       2        3

     /            \

    4               6

                      \

                        7

4 2 1 3 6 7

አልጎሪዝም  

  1. ተለዋዋጭን ያስጀምሩ “CurNode” እንደ የሁለትዮሽ ዛፍ ሥር
  2. ባዶ ቁልል ያስጀምሩ ፣ አንጓዎችን የያዘ እንደተጓዙ
  3. ቁልል ባዶ ካልሆነ ወይም የሚከተሉትን እስኪያደርጉ ድረስ curNode አልሆነም ሙሉ
    • ቢሆንም curNode is አይደለም ሙሉ
      1. ይግፉ curNode ወደ ቁልል
      2. የአሁኑን መስቀለኛ መንገድን በመለወጥ ወደ ግራ በጣም ልጅ መሄድዎን ይቀጥሉ curNode = curNode-> ግራ
    • አሁን ፣ በተደራራቢው ውስጥ ያለው የላይኛው መስቀለኛ መንገድ የአሁኑ ንዑስ ዛፍ ግራኝ መስቀለኛ ክፍል ነው ፣ ስለሆነም በመከለያው ውስጥ የከፍተኛው መስቀለኛ ዋጋ ዋጋን እናትማለን
    • መድብ curNode እንደ ቁልል ውስጥ የላይኛው መስቀለኛ ክፍል ትክክለኛ ልጅ እንደ curNode = stack.top () -> ቀኝ 
    • የአሁኑን መስቀለኛ መንገድን በመለወጥ ወደ ግራ በጣም ልጅ መሄድዎን ይቀጥሉ curNode = curNode-> ግራ የዚህን የግራ መስቀለኛ ክፍል ትክክለኛውን ንዑስ ክፍል ለማስኬድ
    • ከተደራራቢው ውስጥ አንድ ንጥረ ነገር ብቅ ይበሉ

ማስረጃ  

ፕሮግራሙ ቁልቁል የተጨመረው በጣም የቅርብ ጊዜውን ንጥረ ነገር ያሳያል የሚለውን ሀሳብ ይጠቀማል ፣ ከዚህ በላይ በተገለጸው ስልተ ቀመር ፣ የአሁኑ መስቀለኛ መንገድ (መጀመሪያ ላይ የ ዛፍ) ግራ ልጅ አለው ፣ ከዚያ ግራ ልጆቹን ወደ መቆለሉ እየገፋን እንቀጥላለን ፣ ከዚያ በኋላ የቀሩ ልጆች አይቀሩም።

ተመልከት
ወደ BST ማሻሻያ በማይፈቀድበት ጊዜ በ ‹BST› ውስጥ K’th ትልቁ ንጥረ ነገር

ጉዳዩ በሚነሳበት ጊዜ የአሁኑ መስቀለኛ መንገድ ግራ ልጅ እንዳይኖረው ሲደረግ ፣ በክምችቱ ውስጥ ያለው የላይኛው መስቀለኛ መንገድ መሆኑ ግልፅ ነው ፡፡ “በጣም በቅርብ የቀረው መስቀለኛ መንገድ” ታክሏል ስለዚህ በቀሪው የትራንስፖርት ማዘዣ ቅደም ተከተል መጀመሪያ ሊመጣ ይገባል ፡፡ ስለዚህ ፣ በትእዛዛችን ዝርዝር ውስጥ ማተም / ማከል እንጀምራለን እና ከተከመረበት ውስጥ ብቅ እንላለን ፡፡ አንዴ እንደጨረስን ፣ አሁን በ ‹ውስጥ› ውስጥ ስላለው እውነታ ግልጽ ሆነናል የግራ - curNode-right (inorder ቅደም ተከተል) ፣ ግራ አንጓ ክፍል ተሻግረዋል ፡፡ ስለዚህ የመስቀለኛ ክፍል የቀኝ ንዑስ ዛፍ በሂደቱ ውስጥ ነው!

በእውቀት ፣ አሁን ባለው መስቀለኛ ክፍል ንዑስ ንዑስ ክፍል ላይ ተመሳሳይ አሰራርን ተግባራዊ ማድረግ ስለምንፈልግ በአጠቃላይ ማጠቃለል እንችላለን ፡፡ curNode = curNode-> ቀኝ።

የሁለትዮሽ ዛፍ ኢትሬቴሪያል ኢንደር ትራቨርጭንቅላታም መያያዣ መርፌ

አፈጻጸም  

የሁለትዮሽ ዛፍ ኢታሬቲካል ኢንተራቬርሲስ C ++ ፕሮግራም

#include <bits/stdc++.h>

using namespace std;

struct treeNode
{
    int value;
    treeNode *left , *right;
    treeNode(int x)
    {
        value = x;
        left = NULL;
        right = NULL;
    }
};



void iterativeInorder(treeNode* root)
{
    stack <treeNode*> ;
    treeNode* curNode = root;elements

    while(curNode != NULL || !elements.empty())
    {
        while(curNode != NULL)
        {
            elements.push(curNode);
            curNode = curNode->left;
        }


        cout << elements.top()->value << " ";
        curNode = elements.top()->right;
        elements.pop();
    }
}


int main()
{
    treeNode* root = new treeNode(2);
    root->left = new treeNode(1);
    root->right = new treeNode(3);
    root->left->left = new treeNode(4);
    root->left->right = new treeNode(5);

    iterativeInorder(root);
    cout << endl;
    return 0;
}
4 1 5 2 3 

የ ‹ሁለትዮሽ› ዛፍ የተስተካከለ የአሠራር መዛባት የጃቫ ፕሮግራም

import java.util.Stack; 
  
class treeNode 
{ 
    int value; 
    treeNode left, right; 
  
    public treeNode(int x) 
    { 
        value= x; 
        left = right = null; 
    } 
} 
  
class Tree 
{ 
    treeNode root; 
    void iterativeInorder() 
    { 
        
        Stack<treeNode> elements = new Stack<treeNode>(); 
        treeNode curNode = root; 
  
        while (curNode != null || !elements.empty()) 
        { 
            while (curNode != null) 
            { 
                elements.push(curNode); 
                curNode = curNode.left; 
            } 
 
            curNode = elements.peek().right;
            System.out.print(elements.peek().value + " ");
            elements.pop();
        } 
    } 
  
    public static void main(String args[]) 
    { 
        Tree tree = new Tree(); 
        tree.root = new treeNode(2); 
        tree.root.left = new treeNode(1); 
        tree.root.left.left = new treeNode(4); 
        tree.root.left.right = new treeNode(5); 
        tree.root.right = new treeNode(3); 
        tree.iterativeInorder(); 
    } 
}
4 1 5 2 3

ውስብስብነት ትንተና  

የጊዜ ውስብስብነት የሁለትዮሽ ዛፍ ኢትራክቲቭ ኢንደር ትራቨር

የጊዜ ውስብስብነቱ ነው ኦ (ኤን)፣ እያንዳንዱን መስቀለኛ መንገድ በትክክል አንዴ እንደጎበኘነው። እዚህ ፣ N በሁለትዮሽ ዛፍ ውስጥ የአንጓዎች ብዛት ነው።

ተመልከት
በ BST ውስጥ k-th ትንሹን ንጥረ ነገር ያግኙ (በ BST ውስጥ የትእዛዝ ስታትስቲክስ)

የቦታ ውስብስብነት የሁለትዮሽ ዛፍ ኢትራክቲቭ ኢንደር ትራቨር

የቦታ ውስብስብነት ነው ኦ (ኤን) በጣም መጥፎ የሆነውን ሁኔታ ከግምት ውስጥ በማስገባት ዛፉ የተዛባ ሊሆን ይችላል ፣ የቦታ ውስብስብነት በሁለትዮሽ ዛፍ ውስጥ ካሉ የአንጓዎች ብዛት ጋር እኩል ይሆናል።

1