2017-02-09 6 views
0
int secondSmallestInBST(struct node * tNode) { 
if(tNode==NULL || (tNode->left==NULL && tNode->right==NULL)) // case 1 and 2 
    exit; 
if(tNode->left == NULL){      // case 3 
    tNode=tNode->right; 
    while(tNode->left!=NULL){ 
     tNode=tNode->left; 
    } 
    return tNode->data; 
}              // general case. 
node * parent=tNode,* child = tNode->left; 
while(child->left!=NULL){ 
    parent = child; 
    child = child->left; 
} 
return parent->data; 

}zweite kleinste Element in binärer Suchbaum zu finden

nicht alle Testfälle für meinen Code übergeben werden. suggerieren Sie mich, wenn in meinem Code ein Testfall fehlt. Ich finde nur das zweitkleinste Element im binären Suchbaum.

int secondSmallestInBST(struct node * tNode) { 
if(tNode==NULL || (tNode->left==NULL && tNode->right==NULL)) // case 1 and 2 
    exit; 
if(tNode->left == NULL){      // case 3 
    tNode=tNode->right;      // find smallest in right bst. 
    while(tNode->left!=NULL){ 
     tNode=tNode->left; 
    } 
    return tNode->data; 
}              // general case. 
if(tNode->left->left==NULL && tNode->left->right!=NULL){ //missed case. 
    tNode=tNode->left->right; 
    while(tNode->left!=NULL){ 
     tNode=tNode->left; 
    } 
    return tNode->data; 
} 
node * parent= tNode; 
node * child = tNode->left; 
while(child->left!=NULL){ 
    parent = child; 
    child = child->left; 
} 
return parent->data; 

}

// noch einige Testfälle in diesem Code fehlt.

+0

[vollständige Code des Programms] (http://ideone.com/m6zu8D) Hier ist der vollständige Code. –

+0

bitte, fügen Programmiersprache als Tag und, wenn Sie können, geben Sie ein Beispiel für fehlgeschlagenen Test – MrPk

+0

@MrPk Ich frage, ob ich einige Testfall in meinem Code vergessen. –

Antwort

1

-Test für diesen Fall - 3 6 2 3. Baum wird wie folgt aussehen:

6 
/
    2 
    \ 
    3 

Die Art und Weise Sie tun, Antwort wird 6 sein kommen, während es 3.

+0

oh, hab es. danke :) –

+0

Ich habe Ihren Testfall zu meinem Code hinzugefügt, obwohl es teilweise akzeptiert wird. –

0
ist

`

int Successor(Node* root){ 
    while(root->left){ 
    root = root->left; 
    } 
    return root->data; 
} 

int Second_Minimum(Node* root){ 
    // make sure tree is not empty 
    if(!root) 
    return -1; 
    // previous node takes before the last left node 
    Node* previous = root; 
    // check left node first for smallest key 
    if(root->left){ 
    while(root->left){ 
     previous = root; 
     root = root->left;  // 6 
    }       // /
    // checks for the case ----> 2 
    if(!root->right)   // \ 
     return previous->data; // 3 
    } 
    // Go for minimum successor if exists 
    if(root->right) 
    return Successor(root->right); 
    // checked left and right branch root is on his own 
    return -1; 
} 

`

Verwandte Themen