zoukankan      html  css  js  c++  java
  • 二叉搜索树

    介绍:


            使二叉树成为二叉查找树的性质是:对于树中的每一个节点X,它的左子树中全部keyword值小于X的keyword值。而它的右子树中全部keyword值大于X的keyword值。


    二叉查找树声明

    struct TreeNode;
    typedef struct TreeNode *Position;
    typedef struct TreeNode *SearchTree;
    
    struct 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);
    	return T;
    }

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

    Position FindMin(SearchTree T)
    {
    	if(T == NULL)
    		return NULL;	
    	else if(T->Left == NULL)
    		return T;
    	else 
    		return FindMin(T->Left);
    }
    
    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);
    }
    
    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 = (SearchTree)malloc(sizeof(struct TreeNode));	
    		if(T == NULL){
    			printf("Out of space.
    ");
    			return NULL;
    		}
    	}else if(X < T->Element){
    		T->Left = Insert(X, T->Left);	
    	}else (X > T->Element){
    		T->Right = Insert(X, T->Right);	
    	}
    
    	return T;
    }
    

    二叉查找树的删除例程

    SearchTree Delete(ElementType X, SearchTree T)
    {
    	Position TmpCell;
    
    	if(T == NULL){
    		fprintf(stderr,"Element not found.
    ");	
    		return NULL;
    	}else if(X < T->Element)
    		T->Left = Delete(X, T->Left);
    	else if(X > T->Element)
    		T->Right = Dlelte(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;
    }
    


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    python unittest一个简单的实例
    解决python编码格式错误问题
    一个简便的方法,获取某个页面元素的Xpath值
    Xpath基础语法学习
    postman发送带cookie的http请求
    postman测试接口之POST提交本地文件数据
    使用Jmeter录制web脚本
    mac 之 jmeter下载、解压、启动
    第三方测评公司的一些基础理念
    jmeter简单的压测案例——访问百度并发5,持续请求15
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4634956.html
Copyright © 2011-2022 走看看