zoukankan      html  css  js  c++  java
  • 二叉查找树的插入,删除,查找

    二叉查找树的添加,删除,查找算法:
    import java.util.Scanner;
    
    public class BinarySearchTree<AnyType extends Comparable<? super AnyType>> {
    
    	BiNode root;
    	class BiNode<AnyType>{
    		AnyType data;
    		BiNode left;
    		BiNode right;
    		public BiNode(AnyType data){
    			this.data=data;
    		}
            public BiNode(AnyType data,BiNode left,BiNode right){
    			this.data=data;
    			this.left=left;
    			this.right=right;
    		}
    	}
    
    	//添加
    	public void insert(AnyType x){
    		root=insert(x,root);
    	}
    	public BiNode insert(AnyType x,BiNode t){
    	   if(t==null)
    		   return new BiNode(x,null,null);
    	   int compareResult=x.compareTo((AnyType)t.data); 
    	   if(compareResult>0)
    		   t.right=insert(x,t.right);
    	   if(compareResult<0)
    	       t.left=insert(x,t.left);
    	   else;
    	   return t;
    		   
    	}
    	//查找
    	public boolean contains(AnyType x){
    		return contains(x,root);
    	}
    	public boolean contains(AnyType x,BiNode t){
    		if(t==null)
    			return false;
    		int compareResult=x.compareTo((AnyType)t.data);
    		if(compareResult>0)
    			   return contains(x,t.right);
    		if(compareResult<0)
    			    return contains(x,t.left);
    		else 
    			return true;
    	}
    	//找最大和最小
    	public AnyType findMin(){
    	   	
    		return (AnyType) findMin(root).data;
    			
    	}
    	public BiNode findMin(BiNode t){
    		if(t==null)
    			return null;
    		else if(t.left==null)
    			return t;
    		else
    			return findMin(t.left);
    	}
    	public AnyType findMax(){		   	
    		return (AnyType) findMax(root).data;
    		}
    	public BiNode findMax(BiNode t){
    		if(t==null)
    			return null;
    		else if(t.left==null)
    			return t;
    		else
    			return findMax(t.left);
    		}
    	//删除
    	public void remove(AnyType x){
    		root=remove(x,root); 
    	}
    	public BiNode remove(AnyType x,BiNode t){
    		if(t==null)
    			return t;
    		int compareResult=x.compareTo((AnyType)t.data);
    		if(compareResult<0)
    			t.left=remove(x,t.left);
    		else if(compareResult>0)
    			t.right=remove(x,t.right);
    		    else if(t.left!=null&&t.right!=null){
    			t.data=findMin(t.right).data;
    		    t.right=remove((AnyType)t.data,t.right);
    		    }
    		    else
    				t=(t.left!=null)?t.left:t.right;
    
    		return t;	
    	}
    	//中序遍历
    	public void inOrder(){
    		inOrder(root);
    	}
    	public void inOrder(BiNode t){
    		if(t!=null){
    			inOrder(t.left);
    			System.out.print(t.data+"    ");
    			inOrder(t.right);
    		}
    		
    	}
    		
    	public static void main(String[] args) {
    		Scanner sc=new Scanner(System.in);
    		BinarySearchTree<Integer> bsh=new BinarySearchTree<Integer>();
    		for(int i=0;i<6;i++){                                 //输入六个数,个数可改变
    			int numble=sc.nextInt();
    			bsh.insert(numble);
    		}
    		bsh.inOrder();
    	}
    
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    delphi 字符串查找替换函数 转
    Delphi流的操作
    【BZOJ1316】树上的询问 点分治+set
    【BZOJ2406】矩阵 二分+有上下界的可行流
    【BZOJ1853/2393】[Scoi2010]幸运数字/Cirno的完美算数教室 DFS+容斥
    【BZOJ4999】This Problem Is Too Simple! 离线+树状数组+LCA
    【BZOJ2427】[HAOI2010]软件安装 Tarjan+树形背包
    【BZOJ3217】ALOEXT 替罪羊树+Trie树
    【BZOJ1336】[Balkan2002]Alien最小圆覆盖 随机增量法
    【BZOJ3435】[Wc2014]紫荆花之恋 替罪点分树+SBT
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4931860.html
Copyright © 2011-2022 走看看