Πώς μπορώ να δημιουργήσω το δέντρο;

ψήφοι
1

Προσπαθώ να κάνω μια BST και πρέπει να το εκτυπώσετε inorder, postorder, και προ-παραγγελία.

Το πράγμα δεν είμαι σίγουρος για το πώς να δημιουργήσετε αυτό το δέντρο μου main()λειτουργία.

struct Tree_Node
{
    Tree_Node *right;
    Tree_Node *left;
    int info;
};

class bTree
{
private:
    Tree_Node *root;
public:
    bTree();
    void bTree::Insert(Tree_Node*& tree, int item);
    void bTree::preorderPrint(Tree_Node *root);
};

bTree::bTree()
{
    root = NULL;
}


void bTree::Insert(Tree_Node*& tree, int item)
{
  if (tree == NULL)
  {
    tree = new Tree_Node;
    tree->right = NULL;
    tree->left = NULL;
    tree->info = item;
  }
  else if (item < tree->info)
    Insert(tree->left, item);    
  else
    Insert(tree->right, item);   
} 

void bTree::preorderPrint(Tree_Node *root)
{
    if ( root != NULL ) 
    {
        cout << root->info <<  ;
        preorderPrint( root->left );   
        preorderPrint( root->right );   
    }
}

void main()
{
// This is where I need help at
// I'm not sure how to insert a new node

    bTree Test;
    Test.Insert(    
}
Δημοσιεύθηκε 08/12/2009 στις 07:27
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
2

Με τα βλέμματα των πραγμάτων, μπορείτε απλά να γράψετε

Test.Insert(Test.root, 3); // Insert 3
Test.Insert(Test.root, 4); // Insert 4

και ότι θα πρέπει να εργαστεί. Φυσικά, θα πρέπει να δημοσιοποιούν ρίζα.

Ωστόσο, αυτό είναι λίγο δύσκολη, δεδομένου ότι η πρώτη παράμετρος θα είναι πάντα bTree.root - και δεν χρειάζεται να κάνουμε αυτή την κοινό. Να θυμάστε ότι ο χρήστης του τύπου των δεδομένων σας (εσείς ή κάποιος άλλος) δεν θα πρέπει να νοιάζονται για εσωτερικά όπως κόμβοι - που νοιάζονται μόνο για τα δεδομένα τους. Αντ 'αυτού, θα ήθελα να συστήσει κάνει μια ευκολία Insertμέθοδο η οποία χρειάζεται μόνο να πάρει έναν ακέραιο (όχι ένα κόμβο του δένδρου) - αυτό ονομάζεται υπερφόρτωση.

void bTree::Insert(int item)
{
    Insert(root, item);
}

// Keep the other insert method, but make it private.

Στη συνέχεια, μπορείτε απλά να γράψετε:

Test.Insert(3);
Test.Insert(4);
Απαντήθηκε 08/12/2009 στις 07:37
πηγή χρήστη

ψήφοι
1
void bTree::Insert(int item)
{
  Tree_Node * node = new Tree_Node;
  node->left = NULL;
  node->right = NULL;
  node->info = item;
  if (root == NULL)
  {
    root = node;
    return;
  }
  Tree_Node * t = root;
  Tree_Node * p = root;
  while(1)
  {
    if (item < t->info)
    {
       t = t->left;
       if(t == NULL)
       {
          p->left = node;
          return;
       }
    }
    else if(item > t->info)
    {
       t = t->right;
       if(t == NULL)
       {
          p->right = node;
          return;
       }
    }
    else //item already exists in the tree
       return;
    p = t;
  }

} 

//now you can insert nodes like
Test.Insert(5);
Test.Insert(6);
Απαντήθηκε 08/12/2009 στις 07:46
πηγή χρήστη

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