zoukankan      html  css  js  c++  java
  • 28、树与二叉树的应用

    树与二叉树的应用

    一、二叉查找树

      1、二叉查找树的类型定义 

    //二叉查找树的类型定义
    typedef int DataType;					//结点关键码的数据类型
    typedef struct node
    {
    	DataType data;						//结点的数据值
    	struct node * lchild, *rchild;		//指向左、右子女结点的指针
    }BSTNode, *BSTree;
    

      2、二叉查找树的相关操作

    //二叉查找树上的查找
    BSTNode * Search (BSTree root, DataType x,BSTNode * & father)
    {
    	BSTNode * P = root;
    	father = NULL;						//father是查找结点的父结点
    	while(p != NULL && p->data != x)	//寻找包含x的结点
    	{
    		father = p;						//不等,向下层继续查找
    		if(x < p->data)					//x小于根,向左子树继续查找
    			p = p->lchild;
    		else
    			p = p->rchild;				//否则向右子树继续查找
    	}
    	return p;
    }
    
    //二叉查找树的插入
    int Insert (BSTree & root, DataType x)
    {
    	BSTNode * s, * p, * f;
    	p = Search (root,x,f);				//寻找插入位置
    	if (p != NULL)
    		return 0;						//查找成功,不插入
    	s = new BSTNode;					//否则,新结点插入
    	if(s == NULL)
    		return 0;
    	s->data = x;
    	s->lchild = NULL;
    	s->rchild = NULL;
    	if(f == NULL)						//空树,新结点为根结点
    		root = s;
    	else if(x < f->data)				//x小于f,作为左子女插入
    		f->lchild = s;
    	else								//否则,作为右子女插入
    		f->rchild = s;
    	return 1;
    }
    
    //二叉查找树的删除
    int Remove(BSTree & root, DataType x)
    {
    	BSTNode * s, * p, * f;
    	p = Search (root,x,f);				//寻找删除的结点
    	if (p == NULL)
    		return 0;						//查找失败,不作删除
    	if(p->lchild != NULL && p->rchild != NULL)
    	{
    		s = p->lchild;					//有双子女,找 *p的中序前趋 *s
    		while(s->rchild != NULL)
    		{
    			f = s;
    			s = s->rchild;
    		}
    		p->data = s->data;
    		p = s;							//用 *s的值取代 *p的值,再删 *s
    	}
    	if(p -> lchild != NULL)				//左子树非空,记下左子女结点
    		s = p->lchild;					//记下右子女结点
    	else
    		s = p->rchild;
    	if(p == root)						//被删结点为根结点
    		root = s;
    	else if(s->data < f->data)			//父结点直接链接子女结点
    		f->lchild = s;
    	else
    		f->lchild = s;
    	delete p;
    	return 1;
    }
    

       3、相关算法

      

      

       

  • 相关阅读:
    [Sql Server][原创]
    SQL Server T-SQL高级查询
    SQL 网文链接
    Epicor系统二次开发
    lambda表达式的变量作用域
    写一个正则表达式匹配手机号
    函数装饰器在类方法中的使用方法
    关于Django的session的使用 (装饰器版)
    Django ORM相关操作(2)
    Django ORM相关操作(1)
  • 原文地址:https://www.cnblogs.com/wxt19941024/p/6523603.html
Copyright © 2011-2022 走看看