• 二叉查找树的插入,删除,查找


    二叉查找树的添加,删除,查找算法:
    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();
    	}
    
    }

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

  • 相关阅读:
    重构27-Remove God Classes(去掉神类)
    重构25-Introduce Design By Contract checks(契约式设计)
    重构24-Remove Arrowhead Antipattern(去掉箭头反模式)
    重构23-Introduce Parameter Object(参数对象)
    重构22-Break Method(重构方法)
    重构19-Extract Factory Class(提取工厂类)
    重构20-Extract Subclass(提取父类)
    重构21-Collapse Hierarchy(去掉层级)
    重构15-Remove Duplication(删除重复)
    重构16-Encapsulate Conditional(封装条件)
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4931860.html
Copyright © 2020-2023  润新知