• MOOC 4.1 二叉搜索树


    // 二叉搜索树的查找操作Find
    Position Find(ElementType X, BinTree BST)
    {
    	if(!BST)	return NULL;
    	if(X > BST->Data)	
    		return Find(X, BST->Right);
    	else if(X < BST->Data)
    		return Find(X, BST->Left);
    	else
    		return BST;
    } // 尾递归(可以用循环代替)
    
    Position IterFind(ElementType X, BinTree BST)
    {
    	while(BST)
    	{
    		if(X > BST->Data)
    			BST = BST->Right;
    		else if(X < BST->Data)
    			BST = BST->Left;
    		else
    			return BST;
    	}
    	return NULL; 
    } // 查找效率决定于树的高度
    
    // 查找最大值和最小值
    Position FindMin(BinTree BST)
    {
    	if(!BST)	return NULL;
    	else if(!BST->Left)	
    		return BST;
    	else
    		return FindMin(BST->Left);
    } 
    
    Position FindMax(BinTree BST)
    {
    	if(BST)
    		while(BST->Right)	BST = BST->Right;
    	
    	return BST;
    }
    
    // 插入元素
    BinTree Insert(ElementType X, BinTree BST)
    {
    	if(!BST)
    	{
    		BST = malloc(sizeof(struct TreeNode));
    		BST->Data = X;
    		BST->Left = BST->Right = NULL;
    	}
    	else
    	{
    		if(X < BST->Data)
    			BST->Left = Insert(X, BST->Left);
    		else if(X > BST->Data)
    			BST->Right = Insert(X, BST->Right);
    	}
    	return BST;
    } 
    
    // 删除结点
    BinTree Delete(ElementType X, BinTree BST)
    {
    	Position Tmp;
    	if(!BST)	printf("要删除的元素未找到");
    	else if(X < BST->Data)
    		BST->Left = Delete(X, BST->Left);	// 左子树递归删除 
    	else if(X > BST->Data)
    		BST->Right = Delete(X, BST->Right);	// 右子树递归删除 
    	else
    	{
    		if(BST->Left && BST->Right)	// 被删除结点有左右两个子节点 
    		{
    			Tmp = FindMin(BST->Right);
    					/* 在右子树中找最小的元素填充删除结点 */ 
    			BST->Data = Tmp->Data;
    			BST->Right = Delete(BST->Data, BST->Right);
    					/* 在删除结点的右子树中删除最小元素 */ 
    		}
    		else	// 被删除结点有一个或无子节点 
    		{
    			Tmp = BST;
    			if(!BST->Left)	// 有右孩子或无子节点 
    				BST = BST->Right;
    			else if(!BST->Right)	// 有左孩子或无子节点 
    				BST = BST->Left;
    			free(Tmp);
    		}
    	} 
    	return BST;
    } 
    

      

  • 相关阅读:
    vm centos 网络配置
    js数组键入值push和 arr[i]区别
    linux云服务器mysql ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’
    表单提交验证提交数据代码
    memcache原理、简单使用、分布式实现方案
    WAMPSERVER PHP版本5.3的降到 5.2?
    Java之 Servlet
    java之 动态代理
    java之 属性集 & 缓冲流 & 序列化流
    java之 File类 & 字节流(byte)
  • 原文地址:https://www.cnblogs.com/mjn1/p/11463394.html
Copyright © 2020-2023  润新知