Comment puis-je créer l'arbre?

voix
1

Je suis en train de faire un BST et ont besoin de l'imprimer afinde, postorder et pré-commande.

La chose ne suis pas sûr comment créer cet arbre dans ma main()fonction.

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(    
}
Créé 08/12/2009 à 07:27
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
2

Par l'apparence des choses, vous pouvez simplement écrire

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

et cela devrait fonctionner. Bien sûr, vous devrez rendre public racine.

Cependant, cela est un peu gênant, car le premier paramètre sera toujours bTree.root - et vous n'avez pas besoin de faire ce public. Rappelez - vous que l'utilisateur de votre type de données (vous ou quelqu'un d' autre) ne devrait pas avoir à se soucier de nœuds internes tels que - ils ne se soucient que de leurs données. Au lieu de cela, je vous recommande de faire une commodité Insertméthode qui n'a besoin que de prendre un entier (pas un nœud d'arborescence) - ceci est appelé le surchargement.

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

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

Ensuite, vous pouvez simplement écrire:

Test.Insert(3);
Test.Insert(4);
Créé 08/12/2009 à 07:37
source utilisateur

voix
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);
Créé 08/12/2009 à 07:46
source utilisateur

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