package BVS;

public class Strom {

	//koren je prvni vrchol
	Vrchol koren;
	//konstruktor stromu
	Strom(){
	}

	//hledej cestu k prvku
	void tiskCesty(int klic){
		Vrchol x=koren;
		if (x!=null)
			System.out.print(x.data +" ");	
		while (x!=null && klic!=x.klic)
			if(klic<x.klic){
				x=x.levy;
				System.out.print(x.data +" ");	
			}	
			else{
				x=x.pravy;
				System.out.print(x.data +" ");
			}	
	}
	
	//hledej data na zadane pozici klice
	String hledej(int klic){
		Vrchol x=koren;
		while (x!=null && klic!=x.klic)
			if(klic<x.klic)
				x=x.levy;
			else
				x=x.pravy;
		return x==null ? null:x.data;
	}
	
	//najdi nejmensi klic
	int minKlic(){
		Vrchol x=koren;
		while (x.levy!=null)
			x=x.levy;
		return x.klic;
	}

	//najdi nejvetsi klic
	int maxKlic(){
		Vrchol x=koren;
		while (x.pravy!=null)
			x=x.pravy;
		return x.klic;
	}

	//vloz do stromu prvek
	void vloz(int klic,String data){
		Vrchol x=koren,predch=null;
		while (x!=null){
			predch=x;
			if (klic<x.klic)
				x=x.levy;
			else
				x=x.pravy;	
		}
		Vrchol z=new Vrchol(klic,data);
		z.predch=predch;
		if(predch==null)
			koren=z;
		else if (klic<predch.klic)
			predch.levy=z;
		else
			predch.pravy=z;
	}

	//vypis strom "preorder"
	void pruchodPreOrder(Vrchol v){
		if (v==null)
			return;
		v.tiskVrcholu();
		pruchodPreOrder(v.levy);
		pruchodPreOrder(v.pravy);
	}

	//vypis strom "inorder"
	void pruchodInOrder(Vrchol v){
		if (v==null)
			return;
		pruchodInOrder(v.levy);
		v.tiskVrcholu();
		pruchodInOrder(v.pravy);
	}
	
	//vypis strom "postorder"
	void pruchodPostOrder(Vrchol v){
		if (v==null)
			return;
		pruchodPostOrder(v.levy);
		pruchodPostOrder(v.pravy);
		v.tiskVrcholu();
	}
}
