Construye un árbol binario y atraviesa secuencialmente

Descripción del problema:

 

 

 

Descripción del código:

  1 #include <cstdio>
   2 #include <stdlib.h>
   3 #include < string .h>
   4 #include <queue>
   5  #define MAXN 256
   6  usando el  espacio de nombres std;
  7  Char s [MAXN + 10 ];
  8 typedef struct Node
   9  {
 10      int h_v;
11      int v;
12      struct Node * left;
13      struct Node * right;
14 } nodo, * pt;
15  
16 pt Newnode () // Crear un nuevo nodo 
17  {
 18      pt p = (pt) malloc ( sizeof (node));
 19      p-> h_v = 0 ;
 20      p-> left = p-> right = NULL;
 21      return p;
 22  }
 23  
24 pt root = Newnode ();
 25  
26  void addnode ( int v, char * s)
 27  {
 28      pt p = root;
 29      int n = strlen (s);
30      para ( int i = 0 ; i <n; i ++ )
 31      {
 32          if (* (s + i) == ' L ' )
 33          {
 34              if (p-> left == NULL) 
 35              {
 36                  p-> left = Newnode ();
37              }
 38              p = p-> izquierda;
39          }
 40          más  si (* (s + i) == ' R ' )
 41          {
 42              si(p-> right == NULL) 
 43              {
 44                  p-> right = Newnode ();
 45              }
 46              p = p-> right;
 47          }
 48      }
 49      if (p-> h_v == 1 )
 50      {
 51          printf ( "El valor da error varias veces \ n " );
 52          retorno ;
 53      }
 54      p-> v = v;
 55      p-> h_v = 1 ;
 56  }
 57  
58 nulo Read_input ()
 59  {
 60      while (scanf ( " % s " , & s) == 1 )
 61      {
 62          if (strcmp (s, " () " ) == 0 ) break ;
63          int v;
64          sscanf (s + 1 , " % d " , & v);
65          addnode (v, strchr (s, ' , ' ) + 1 );
66      }
 67  }
 68 
69  vacío BFS (pt raíz)
 70  {
 71      cola <pt> q;
 72      cola < int > ans;
 73      q.push (raíz);
 74      pt p;
 75      while (! Q.empty ())
 76      {
 77          p = q.front ();
 78          q.pop ();
 79          if (! p-> h_v)
 80          {
 81              printf ( " Error de valor nulo \ n " );    // De acuerdo con los requisitos de la pregunta, si hay un nodo que no ha sido asignado, se informará un error salida 
82              de retorno;
 83          }
 84          ans.push (p-> v);
 85          if (p-> left) q.push (p-> left);
 86          if (p-> right) q.push (p-> right);
 87      }
 88      while (! Ans.empty ())
 89      {
 90          printf ( " % d \ t " , ans.front ());
 91          ans.pop ();
 92      }
 93  }
 94  
95  liberación nula (raíz del pt)                 // Memoria dinámica libre para evitar pérdidas de memoria 
96  {
 97     if (! root) return ;
98      if (root-> left) release (root-> left);
99      if (root-> right) release (root-> right);
100  }
 101  
102  int main ()
 103  {
 104      Read_input ();
105      BFS (raíz);
106      liberación (raíz);
107      devuelve  0 ;
108 }

Resultado de la operación:

 

 

Supongo que te gusta

Origin www.cnblogs.com/bboykaku/p/12711804.html
Recomendado
Clasificación