elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Arboles Binarios c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Arboles Binarios c++  (Leído 2,057 veces)
maferavagar

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Arboles Binarios c++
« en: 7 Julio 2015, 00:44 am »

Buenas Tardes alguien me podria decir que significa within this contex; me dice que HijoIzquierdo,HijoDerecho y valor son privados, estoy usando Dev c++
Pongo mi codigo. De antemano gracias.
Código
  1. #include <time.h>
  2. #include <stdio.h>
  3.  
  4. #include <stdlib.h>
  5. #include <cmath>
  6. #include <iostream>
  7.  
  8. using namespace std;
  9.  
  10. class Nodo
  11. {
  12.    private:
  13.    int dato;
  14.    Nodo *HijoIzquierdo, *HijoDerecho,*Raiz;
  15.    public:
  16.        Nodo* InsertaNodo(int, Nodo*);
  17.        void EnOrden(Nodo*);
  18.        void PreOrden(Nodo*);
  19.        void PostOrden(Nodo*);
  20.        int Nivel_arbol(Nodo*);
  21.        int NumeroNodo(Nodo*);
  22.        int FE(Nodo*);
  23.        int Total_hojas2(Nodo*);
  24.        int Total_hojas(Nodo*);
  25.        int Suma_nodos(Nodo*);
  26.  
  27. };
  28.  
  29.  
  30.  
  31. //Declaro las funciones que tiene el programa
  32.  
  33. Nodo::Nodo* InsertaNodo(int valor, Nodo*subArbol)
  34. {
  35.   if(subArbol==NULL)
  36.   {
  37.      subArbol=new Nodo;
  38.      subArbol->HijoIzquierdo=subArbol->HijoDerecho=NULL;
  39.      subArbol->dato=valor;
  40.   }
  41.   else
  42.  
  43.      if(valor<subArbol->dato)
  44.         subArbol->HijoIzquierdo=InsertaNodo(valor, subArbol->HijoIzquierdo);
  45.  
  46.      else
  47.         subArbol->HijoDerecho=InsertaNodo(valor, subArbol->HijoDerecho);
  48.   return(subArbol);
  49. }
  50.  
  51.  
  52. void Nodo:: EnOrden(Nodo *subArbol)
  53. {
  54.   if (subArbol!=NULL)
  55.   {
  56.      EnOrden(subArbol->HijoIzquierdo);
  57.      printf("%d ", subArbol->dato);
  58.      EnOrden(subArbol->HijoDerecho);
  59.   }  
  60. }
  61.  
  62. void Nodo:: PreOrden(Nodo *subArbol)
  63. {
  64.   if (subArbol!=NULL)
  65.   {
  66.      printf("%d ", subArbol->dato);
  67.      PreOrden(subArbol->HijoIzquierdo);      
  68.      PreOrden(subArbol->HijoDerecho);
  69.   }  
  70. }
  71.  
  72. void Nodo:: PostOrden(Nodo *subArbol)
  73. {
  74.   if (subArbol!=NULL)
  75.   {
  76.  
  77.      PostOrden(subArbol->HijoIzquierdo);      
  78.      PostOrden(subArbol->HijoDerecho);
  79.      printf("%d ", subArbol->dato);
  80.   }  
  81. }
  82.  
  83. int Nodo:: Nivel_arbol(Nodo *subArbol)
  84. {
  85.    int a=0,b=0;
  86.   if(subArbol==NULL)
  87.   {
  88.      return 0;
  89.   }
  90.  
  91.   else
  92.   {
  93.      a=Nivel_arbol(subArbol->HijoIzquierdo)+1;
  94.      b=Nivel_arbol(subArbol->HijoDerecho)+1;
  95.   }
  96.   if(a>=b)
  97.      return a; //La raiz no se suma
  98.   else
  99.      return b; //La raiz no se suma
  100.  
  101. }
  102.  
  103. int Nodo:: NumeroNodo (Nodo *subArbol)
  104. {
  105.   if(subArbol==NULL)
  106.      return 0;
  107.  
  108.   else
  109.      return 1+NumeroNodo(subArbol->HijoIzquierdo)+NumeroNodo(subArbol->HijoDerecho);
  110. }
  111.  
  112. int Nodo:: FE(Nodo *subArbol)
  113. {
  114.   if(subArbol==NULL)
  115.      return 0;
  116.  
  117.   else
  118.      return Nivel_arbol(subArbol->HijoDerecho)-Nivel_arbol(subArbol->HijoIzquierdo);
  119. }
  120.  
  121. int Nodo:: Total_hojas(Nodo *subArbol)
  122. {
  123.   if(Raiz==NULL)
  124.      return 0;
  125.   if(Raiz->HijoDerecho==NULL && Raiz->HijoIzquierdo==NULL)
  126.      return 0;
  127.  
  128.   return Total_hojas2(subArbol);
  129. }
  130.  
  131. int Nodo:: Total_hojas2(Nodo *subArbol)
  132. {
  133.   if(subArbol==NULL)
  134.      return 0;
  135.  
  136.   if(subArbol->HijoDerecho==NULL&&subArbol->HijoIzquierdo==NULL)
  137.      return 1;
  138.  
  139.   return Total_hojas(subArbol->HijoDerecho) + Total_hojas(subArbol->HijoIzquierdo);
  140.  
  141.  
  142.   //return 0;
  143. }
  144.  
  145. int Nodo::Suma_nodos(Nodo *subArbol)
  146. {
  147.   if(subArbol==NULL)
  148.      return 0;
  149.  
  150.   return subArbol->dato + Suma_nodos(subArbol->HijoDerecho) + Suma_nodos(subArbol->HijoIzquierdo);
  151.  
  152. }
  153.  
  154. int main()
  155. {
  156.    Nodo Obj;
  157.  
  158.   int k,num,opc=1,valor,nivel=0,nodos=0,nivel_esperado,frecu=0,hojas=0;
  159.   Nodo *Raiz;
  160.   Raiz=NULL;
  161.  
  162.   while(opc!=11)
  163.   {
  164.      printf("1.- Insertar Arbol\n");
  165.      printf("2.- Recorrido en preorden\n");
  166.      printf("3.- Recorrido  en orden\n");
  167.      printf("4.- Recorrido en postorden\n");
  168.      printf("5.- Nivel del arbol\n");
  169.      printf("6.- Numero de Nodos\n");
  170.      printf("7.- Nivel Perfecto de Nodos\n");
  171.      printf("8.- Factor de Equilibrio\n");
  172.      printf("9.- Numero de Hojas\n");
  173.      printf("10.- Suma de Nodos\n");
  174.      printf("11.- Salir\n");
  175.      scanf("%d",&opc);
  176.  
  177.      switch(opc)
  178.      {
  179.         case 1:
  180.            printf("Inserta Numero para el Arbol\n");
  181.            scanf("%d",&num);
  182.            Raiz=Obj.InsertaNodo(num, Raiz);
  183.            //printf("Quieres seguir...");
  184.            break;
  185.  
  186.         case 2:  Obj.PreOrden(Raiz);
  187.            printf("\n");
  188.            break;
  189.  
  190.         case 3:  Obj.EnOrden(Raiz);
  191.            printf("\n");
  192.            break;
  193.  
  194.         case 4:  Obj.PostOrden(Raiz);
  195.            printf("\n");
  196.            break;
  197.  
  198.         case 5:
  199.            nivel=Obj.Nivel_arbol(Raiz);
  200.            printf("Nivel del Arbol %d\n", nivel-1);
  201.            break;
  202.  
  203.         case 6:
  204.            nodos=Obj.NumeroNodo(Raiz);
  205.            printf("Numero de Nodos %d\n", nodos);
  206.            break;
  207.  
  208.         case 7:
  209.            nivel_esperado = long(float(Obj.NumeroNodo(Raiz)))/log(2.0);
  210.            printf("El Nivel Perfecto %d\n", nivel_esperado);
  211.            break;
  212.  
  213.         case 8:
  214.            frecu=Obj.FE(Raiz);
  215.            printf("Factor de Equilibrio es %d \n", frecu);
  216.            break;
  217.  
  218.         case 9:
  219.            hojas=Obj.Total_hojas(Raiz);
  220.            printf("La cantidad de Hojas es %d\n",hojas);
  221.            //cout<<hojas<<endl;
  222.            break;
  223.  
  224.         case 10:
  225.            printf("La suma es %d\n", Obj.Suma_nodos(Raiz));
  226.            break;
  227.  
  228.  
  229.  
  230.      }
  231.      //system("cls");
  232.   }
  233.   system("PAUSE");
  234.   return 0;    
  235.  
  236. }

Mod: Los còdigos deben ir en etiquetas GeSHi, los temas deben ir en sus respectivos subforos, movido


« Última modificación: 7 Julio 2015, 00:49 am por engel lex » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.414


ASMático


Ver Perfil WWW
Re: Arboles Binarios c++
« Respuesta #1 en: 7 Julio 2015, 01:37 am »

Si es posible, pon el error. El error contiene toda la información necesaria para poder arreglarlo.

EDITO: El error es, por ejemplo en:
Código
  1. Nodo::Nodo* InsertaNodo(int valor, Nodo*subArbol)
  2. {
  3.   if(subArbol==NULL)
  4.   {
  5.      subArbol=new Nodo;
  6.      subArbol->HijoIzquierdo=subArbol->HijoDerecho=NULL;
  7.      subArbol->dato=valor;
  8.   }

subArbol->HijoIzquierdo es un valor privado. Si bien es cierto que eso es un método de Nodo, solo puedes acceder a los métodos y campos private y protected del mismo objeto.


« Última modificación: 7 Julio 2015, 01:40 am por ivancea96 » En línea

maferavagar

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Arboles Binarios c++
« Respuesta #2 en: 8 Julio 2015, 03:06 am »

Ya pude resolver ese problema.
Pero ahora cuando lo vuelvo a compilar me sale un mensaje y dice "expected init-declarator before Insertar_Nodo" y en esa misma linea me dice "expected ',' or ';' before Insertar_Nodo"

Código:
public:
                Nodo* Insertar_Nodo(int valor,Nodo* subArbol);
                //void EnOrden(Nodo*);
                //void PreOrden(Nodo*);
                void PostOrden(Nodo*);                
                int Total_hojas2(Nodo*);
                int Total_hojas(Nodo*);
              
};
Nodo*::Nodo Insertar_Nodo(int valor, Nodo*subArbol) // en esta linea marca mi error
{
   if(subArbol==NULL)
   {
      subArbol=new Nodo;
      subArbol->HijoIzquierdo=subArbol->HijoDerecho=NULL;
      subArbol->dato=valor;
   }
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.414


ASMático


Ver Perfil WWW
Re: Arboles Binarios c++
« Respuesta #3 en: 8 Julio 2015, 11:20 am »

Código
  1. Nodo*  Nodo::Insertar_Nodo(int valor, Nodo*subArbol)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Arboles binarios
Programación C/C++
josue_tux 3 9,286 Último mensaje 9 Mayo 2010, 20:18 pm
por leogtz
Arboles binarios
Java
soser 0 1,578 Último mensaje 27 Octubre 2010, 08:45 am
por soser
[Consulta] Arboles binarios
Programación C/C++
Gunhack 1 1,001 Último mensaje 11 Noviembre 2015, 08:47 am
por ivancea96
Arboles binarios (recursividad)
Programación C/C++
HackingLikor 1 1,463 Último mensaje 3 Abril 2016, 08:28 am
por furciorifa
Arboles Binarios en C++
Programación C/C++
pedro0620 0 1,198 Último mensaje 3 Octubre 2016, 05:10 am
por pedro0620
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines