zoukankan      html  css  js  c++  java
  • 二叉查找树实现

    二叉查找树声明

    #ifndef _Tree_H
    
    struct TreeNode;
    typedef struct TreeNode *Position;
    typedef struct TreeNode *SearchTree;
    
    SearchTree MakeEmpty(SearchTree T);
    Position Find( ElementType X,SearchTree T);
    Position FindMin(SearchTree T);
    Position FindMax( SearchTree T);
    SearchTree Insert(ElementType X,SearchTree T);
    SearchTree Delete(ElementType X,SearchTree T);
    ElementType Retrieve( Position P);
    
    #endif
    
    srtuct TreeNode
    {
    	ElementType Element;
    	SearchTree Left;
    	SearchTree Right;
    };
    

    建立一颗空树

    SearchTree MakeEmpty(SearchTree T)
    {
    	if(T != NULL)
    	{
    		MakeEmpty(T->Left);
    		MakeEmpty(T->Right);
    		Free(T);
    	}
    	return NULL;
    }
    

    二叉查找树的Find操作

    Position Find(ElementType X,SearchTree T)
    {
    	if(T == NULL)
    		return NULL;
    	if( X < T->Element)
    		return Find(X,T->Left)
    	else if( X > T->Element)
    		return Find(X,T->Right)
    	else return T;
    }
    

    二叉查找树的FindMin递归实现

    Position FindMin(SearchTree T)
    {
    	if(T == NULL)
    		return NULL;
    	else if( T->Left == NULL)
    		return T;
    	else
    		return FindMin(T->Left);
    }
    

    二叉查找树的FindMin非递归实现

    Position FindMin(SearchTree T)
    {
    	if(T != NULL)
    		while(T->Left != NULL)
    			T = T->Left;
    	return T;
    }
    

    二叉查找树的FindMax递归实现

    Position FindMax(SearchTree T)
    {
    	if(T == NULL)
    		return NULL;
    	else if( T->Right == NULL)
    		return T;
    	else
    		return FindMax(T->Right);
    }
    

    二叉查找树的FindMax非递归实现

    Position FindMax(SearchTree T)
    {
    	if(T != NULL)
    		while(T->Right != NULL)
    			T = T->Right;
    	return T;
    }
    

    二叉查找树的插入操作

    SearchTree Insert(ElementType X,SearchTree T)
    {
    	if(T == NULL)
    	{
    		T = malloc(sizeof(struct TreeNode));
    		if(T == NULL)
    			FatalError("Out of space!!!");
    		else
    		{
    			T->Element = X;
    			T->Left = T->Right = NULL;
    		}
    	}
    	else if(X < T->Element)
    		T->Left = Insert(X,T->Left);
    	else if( X > T->Element)
    		T->Right = Insert(X,T->Right);
    	return T;
    }
    

    二叉查找树的删除操作

    SearchType Delete(ElementType X,SearchTree T)
    {
    	Position TmpCell;
    	if(T == NULL)
    		Error("Element not found");
    	else if(X < T->Element)
    		T->Left = Delete(X,T->Left);
    	else if(X > T->Element)
    		T->Right = Delete(X,T->Right);
    	else if(T->Left && T->Right)
    	{
    		TmpCell = FindMin(T->Right);
    		T->Element = TmpCell->Element;
    		T->Right = Delete(T->Element,T->Right);
    	}
    	else
    	{
    		TmpCell = T;
    		if(T->Left == NULL)
    			T = T->Right;
    		else if(T->Right == NULL)
    			T = T->Left;
    		free(TmpCell);
    	}
    	return T;
    }
  • 相关阅读:
    我今天能懂
    SpringMVC之RequestContextHolder分析
    idea只导入部分依赖
    idea中GitPush失败问题
    SpringBoot常用配置,引入外部配置文件信息,热加载
    idea的yml文件不识别问题
    SpringBoot介绍,快速入门小例子,目录结构,不同的启动方式,SpringBoot常用注解
    Java连接Redis,存储对象获取对象()byte和json),连接池
    Nginx的反向代理
    Nginx介绍,安装,配置
  • 原文地址:https://www.cnblogs.com/y3w3l/p/6363506.html
Copyright © 2011-2022 走看看