zoukankan      html  css  js  c++  java
  • 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;
    } 
    

      

  • 相关阅读:
    LL(1)文法的判断,递归下降分析程序
    消除左递归
    DFA最小化,语法分析初步
    非确定的自动机NFA确定化为DFA
    正规式、正规文法与自动机
    第03组 Alpha事后诸葛亮
    第03组 Alpha冲刺(4/4)
    第03组 Alpha冲刺(3/4)
    第03组 Alpha冲刺(2/4)
    第03组 Alpha冲刺(1/4)
  • 原文地址:https://www.cnblogs.com/mjn1/p/11463394.html
Copyright © 2011-2022 走看看