Java Binary Search Tree with Strings

Açıklama

  • Binary Search Tree ( İkili Arama Ağacı ) algoritmasının amaçı, verilerin birbirine göre küçüklük büyüklük ilişkisi göre ağaça yerleştirir.
  • Bu algoritmada arama olayı ise aranacak kelimenin diğer kelimelerde ascii değerlerin karşılaştırarak büyüklük ve küçüklük durumuna göre bulunmasıdır.
  • Ağaçtaki her düğüm 2 düğüme sahiptir ve düğüm solundaki düğüm küçük değer, sağındaki düğüm büyük değerlidir.

 

Kod

package bst;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class main {

	public static void main(String args[]) {
		
		try {
			
			Scanner s = new Scanner(new File("words.txt"));  // dışardan verilecek veri seti
			
			BST bst = new BST();
			
			while(s.hasNextLine()) {
				//System.out.println(s.nextLine());
				bst.add(new Eleman(s.nextLine()));
			}

			//System.out.println("kelimeler eklendi.");
	
	
			System.out.println(bst.find("kodsözlük"); // Binary Search Tree'de kelime arama
	


			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	//	System.out.println(b.find());
		
	}
	
	
	
	
	
	
	
}


class BST{
	
	
	Eleman root;
	
	BST(){
		root=null;
	}
	
	
	
	void add(Eleman newnode) {
		
		
		if(root==null) {
			
			root=newnode;
			
			
		}else {
			
			
			Eleman tmp = root;
			
			Eleman parent;
			
				
			while(true) {
				
				parent = tmp;
			
				boolean large = false;
				
				
				for(int i=0;i<newnode.key.length();i++) {
					
					if(i < tmp.key.length() && i < newnode.key.length() && newnode.key.charAt(i) != tmp.key.charAt(i)) {
						if(newnode.key.charAt(i) < tmp.key.charAt(i)) {
							large=true;
							break;
						}
					}
					
				}
				
				if(large) {
					
					tmp=tmp.left;
					
					if(tmp == null) {
						parent.left=newnode;
						return;
					}
					
					
				}else {
					
					
					tmp=tmp.right;
					
					if(tmp == null) {
						parent.right=newnode;
						return;
					}

				}
			}
			
		}
	}
	

	boolean find(String value) {
		
		
		Eleman tmp = root;
		Eleman pre = null;
	
	
		
		while(tmp != null) {
			
			
			
			pre=tmp;
			
			boolean large = false;
			
			if(tmp.key.equals(value))
				return true;
			
			
			
			for(int i=0;i<value.length();i++) {
				

				if(i < tmp.key.length() && i < value.length() && value.charAt(i) != tmp.key.charAt(i)) {
					if(value.charAt(i) < tmp.key.charAt(i)) {
						large=true;
						break;
					}
				}
				
			}
			
			if(large) {
				tmp = tmp.left;
			}
			else {
				tmp = tmp.right;
			}
			
		
			
			
		}
	
		return false;
	}
	
	
}


class Eleman{
	
	
	String key;
//	int value;
	Eleman right,left;
	
	
	Eleman(String key){
		this.key=key;
		right=null;
		left=null;
	}
	
	
	
}

Yorumlar

Bu gönderi için yorum yapılmadı.