AVL树C语言完整实现

AVL(C语言实现 AVL的相关操作,包括插入,删除,查找,调整。(C语言实现 阅读详情

AVL树的介绍见http://blog.csdn.net/pngynghay/article/details/22443525,本文给出的是AVL树的一种实现。

采用非递归方式,效率较好,经过常规测试。

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <assert.h>

typedef enum
{
	EH = 0,
	LH = 1,
	RH = -1
}bh_t;


typedef enum
{
	FALSE = 0,
	TRUE = 1
}bool_t;

typedef int ElemType;

typedef struct BSTNode
{
	ElemType key;
	int bf;
	struct BSTNode *lchild,*rchild,*parent;
}BSTNode,*BSTree;

bool_t  searchAVL(BSTree root,ElemType key, BSTNode **parent)
{
	BSTNode *tmp = NULL;
	assert(root != NULL);
	*parent = root->parent;
	tmp = root;
	while(NULL != tmp)
	{
		if(tmp->key == key)
		{
			return TRUE;
		}

		*parent = tmp;
		if(tmp->key > key)
		{
			tmp = tmp->lchild;
		}
		else
		{
			tmp = tmp->rchild;
		}
	}
	return FALSE;
}

/* get the minimum node*/
BSTNode* minNode(BSTNode* root)
{
	if (root == NULL)
	{
		return NULL;
	}
	while (root->lchild != NULL)
	{
		root = root->lchild;
	}
	return root;
}

/* get the maximum node*/
BSTNode* maxNode(BSTNode* root)
{
	if (root == NULL)
	{
		return NULL;
	}
	while (root->rchild != NULL)
	{
		root = root->rchild;
	}
	return root;
}

/* get the previous node*/
BSTNode* preNode(BSTNode* target)
{
	if (target == NULL)
	{
		return NULL;
	}
	if (target->lchild != NULL)
	{
		return maxNode(target->lchild);
	}
	while ((target->parent!=NULL) && (target!=target->parent->rchild))
	{
		target = target->parent;
	}
	return target->parent;
}

/* get the next node*/
BSTNode* nextNode(BSTNode* target)
{
	if (target == NULL)
	{
		return NULL;
	}
	if (target->rchild != NULL)
	{
		return minNode(target->rchild);
	}
	while ((target->parent!=NULL) && (target!=target->parent->lchild))
	{
		target = target->parent;
	}
	return target->parent;
}

BSTNode* leftbalance(BSTNode* root, BSTNode* parent, BSTNode* child)
AVL插入、删除的分析与实现 AVL基本概念 首先,AVL也是一种 阅读详情

相关推荐

C语言实现AVL(附完整源码)

C语言实现数组ArrayAVL节点定义实现以下15个接口完整实现和main测试源码 AVL节点定义 struct AVLnode { int key; struct AVLnode *left; struct AVLnode *right; int height; }; typedef struct AVLnode avlNode; 实现以下15个接口 avlNode *newNode(int key); int nodeHeight(avlNode *node); int

希望我的博客,能帮上你解决学习中工作中所遇到的问题 813

C语言-AVL

当插入节点在“外侧”时(即左-左或右-右的情况),进行所谓的单旋转操作。在保留二叉搜索特性的同时,又加上了平衡条件,即每个节点的左右子的高度最多差1。《数据结构与算法分析》一书中认为AVL的删除操作较为复杂,更加推荐使用懒惰删除,即保留节点在中,但是加以标记。不过值得注意的是,代码中的Height函数单独出来写是有必要的,因为我们要处理空的情况。总体上插入函数的思路与二叉搜索的插入函数思路相似,不过多了对高导致不平衡的条件的讨论。在有了以上对旋转的讨论之后,完成节点的插入操作就不再是难事。

2301_79349959的博客 1155

avl的C语言实现(图解+注释)

【代码】avl的C语言实现(图解+注释)

caradm的博客 192

C语言 平衡二叉搜索AVL

AVL是一种自平衡的二叉搜索,它在插入和删除操作后能够通过旋转操作来保持的平衡。AVL是由苏联数学家G.M. Adelson-Velsky和E.M. Landis于1962年提出的,其名称即来源于他们的姓氏的首字母。

m0_73070900的博客 525

C 语言实现 AVL

一、平衡二叉简介     平衡二叉又称 AVL,其具有如下两个性质: 必须是二叉; 必须是一颗空或者其左右子的高度只差不超过 1。     平衡二叉实现主要是为了避免普通二叉查找在极端情况下(全部节点只有左孩子或者全部节点只有右孩子)会像链表那样影响性能。 二、AVL 自平衡 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "AVLTree.h" #defi

SauryN的博客 2517

AVL进行插入的非递归函数

数据结构与算法分析——c语言描述 练习4.19  答案 挺有意思的。改递归为非递归。其实原理还是一样,都用了栈。 AvlTree insert(ElementType X, AvlTree t) { AvlTree root = t; std::stack route; while (1) { if (t == NULL) { t = (AvlTree)ma

wwj_bupt 2370

用C语言实现的——一个完整AVL的交互式系统

用C语言实现的——一个完整AVL的交互式系统,支持查找、插入、删除、查找指定节点的前驱和后继节点、形展示、层次展示、文件存储等功能。

2401_84643729的博客 1661

linux tree c语言实现,AVLC语言完整实现

AVL的介绍见http://www.linuxidc.com/Linux/2014-04/99733.htm,本文给出的是AVL的一种实现。采用非递归方式,效率较好,经过常规测试。#include #include #include #include #include typedef enum{EH = 0,LH = 1,RH = -1}bh_t;typedef enum{FALSE = 0,...

weixin_42165980的博客 157

C语言进程,AVLC语言完整实现

采用非递归方式,效率较好,经过常规测试。#include #include #include #include #include typedef enum{EH = 0,LH = 1,RH = -1}bh_t;typedef enum{FALSE = 0,TRUE = 1}bool_t;typedef int ElemType;typedef struct BSTNode{ElemType key...

weixin_30061949的博客 265

C 语言实现 AVL :平衡二叉搜索完整指南

int data;// 节点数据int height;// 节点高度// 左子指针// 右子指针} AVLNode;AVL 通过维护节点的平衡因子和适当的旋转操作,保证了的平衡性,从而确保了各种操作的高效性。本文实现AVL 包含了完整的插入、删除和遍历功能,可以作为学习和实际应用的基础。在实际应用中,还可以根据需要扩展更多功能,如查找特定值、求的深度、判断是否为 AVL 等。理解 AVL 的工作原理,对于掌握其他平衡结构(如红黑、B 等)也有很大帮助。

2301_77623084的博客 1114

AVL,C语言实现完整代码,先贴上,讲解稍后

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #define ADD_FOUND 0 #define ADD_ALLOC_FAILED 1 #define ADD_ROOT 2 #define ADD_NORMAL 3 #defin...

weixin_30908649的博客 249

AVL(一)之 图文解析 和 C语言实现

概要 本章介绍AVL。和前面介绍"二叉查找"的流程一样,本章先对AVL的理论知识进行简单介绍,然后给出C语言实现。本篇实现的二叉查找是C语言版的,后面章节再分别给出C++和Java版本的实现。 建议:若您对"二叉查找"不熟悉,建议先学完"二叉查找"再来学习AVL。 目录 1. AVL的介绍 2. AVL的C实现 3. AVL的C实现(完整源码) 4. AVL

ProgrammingRing的专栏 9429

AVL--C语言实现

/************************************************************************ *                        AVL demo程序                                  * Version:1.0    实现insert函数                             

nizqsut的专栏 353

重温数据结构与算法之AVL可视化

​当连续并且有序的数据陆续插入一棵二叉搜索()时,这时就会退化为链表,查找、插入和删除都需要花费O(n)O(n)O(n)时间,这时二叉搜索的优势就没有了,AVL的发明就是为了解决这种问题。​在计算机科学中,AVL是一种自平衡的二叉搜索。在AVL中,任何节点的两个子的高度最多相差一,如果在插入或删除时,它们相差大于一时,会进行自平衡以恢复此属性。在平均和最坏情况下,查找、插入和删除都需要O(logn)时间。...

十十办文武的博客 772

AVL(一)之 C语言实现

概要 本章介绍AVL。和前面介绍"二叉查找"的流程一样,本章先对AVL的理论知识进行简单介绍,然后给出C语言实现。本篇实现的二叉查找是C语言版的,后面章节再分别给出C++和Java版本的实现。 建议:若您对"二叉查找"不熟悉,建议先学完"二叉查找"再来学习AVL。 目录 1. AVL的介绍 2. AVL的C实现 3. AVL的C实现(完整源码) 4.

止语的博客 858

平衡二叉AVL)及c语言实现

平衡二叉AVL)及c语言实现 构建平衡二叉的代码实现: #include <stdio.h> #include <stdlib.h> //分别定义平衡因子数 #define LH +1 #define EH 0 #define RH -1 typedef int ElemType; typedef enum {false,true} bool; //定义二叉排序...

sihshsbsks的博客 406
上一篇: AVL树及C语言实现
下一篇: AVL树 VS 红黑树
IT_Linux
博客等级 码龄14年 31粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值