Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Ahoj,
kodím si BVS, ale při pokusu o vložení jakékoliv hodnoty do stromu se do ni nic neuloží, strom je stále prázdný. Proč?
using System;
namespace bst
{
public class Uzel
{
public int hodnota;
public Uzel Pravy = null;
public Uzel Levy = null;
public Uzel(int hodnota)
{
this.hodnota = hodnota;
}
}
public class BVS
{
public Uzel Koren = null;
public BVS()
{
}
public void Pridej(int nova_hodnota)
{
if(Najdi(nova_hodnota))
{
Console.WriteLine("Zadaná hodnota (" + nova_hodnota + ") se ve stromu už nachází");
}
else
{
PridejUzel(this.Koren,nova_hodnota);
}
}
public void PridejUzel(Uzel Aktualni, int nova_hodnota)
{
if(Aktualni == null)
{
Aktualni = new Uzel(nova_hodnota);
}
else if(nova_hodnota < Aktualni.hodnota)
{
PridejUzel(Aktualni.Levy,nova_hodnota);
}
else if(nova_hodnota > Aktualni.hodnota)
{
PridejUzel(Aktualni.Pravy,nova_hodnota);
}
}
public void Smaz(int ke_smazani)
{
if(this.Najdi(ke_smazani))
{
}
else
{
Console.WriteLine("Zadaná hodnota (" + ke_smazani + ") se ve stromu nenachází");
}
}
public bool Najdi(int hledane)
{
Uzel Aktualni = this.Koren;
while(Aktualni != null)
{
if(hledane < Aktualni.hodnota)
{
Aktualni = Aktualni.Levy;
}
else if(hledane > Aktualni.hodnota)
{
Aktualni = Aktualni.Pravy;
}
else
{
return true;
}
}
return false;
}
public void Zobraz()
{
ZobrazPodstrom(this.Koren,0);
}
public void ZobrazPodstrom(Uzel VstupniUzel, int hloubka)
{
if(VstupniUzel != null)
{
for(int i=1; i<=hloubka; i++)
{
Console.Write("\t");
}
Console.WriteLine(VstupniUzel.hodnota);
}
if(VstupniUzel.Levy != null)
{
ZobrazPodstrom(VstupniUzel.Levy,hloubka+1);
}
if(VstupniUzel.Pravy != null)
{
ZobrazPodstrom(VstupniUzel.Pravy,hloubka+1);
}
}
}
class Program
{
public static void Main(string[] args)
{
BVS strom = new BVS();
Console.WriteLine(strom.Najdi(5));
strom.Pridej(5);
Console.WriteLine(strom.Najdi(5));
Console.WriteLine(strom.Koren.hodnota);
//strom.Zobraz();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Offline

↑ poiu:
V metodě Pridej voláš PridejUzel(this.Koren,nova_hodnota); a v metodě PridejUzel při prvním vložení nezměníš hodnotu this.Koren.
if(Aktualni == null)
{
Aktualni = new Uzel(nova_hodnota);
}Tohle změní hodnotu proměnné Aktualni v aktuálním prostředí, tj. v bloku té funkce, nezmění to hodnotu this.Koren. V C# se nepracuje s odkazy, ale s referencemi.
Offline
Stránky: 1