#include "stdlib.h"
#include "stdio.h"
typedef int DataType;
#define MAX 100
/*读入n(n<=100)个两两不等的整数(以-9999介绍),构造包含这个n个整数的AVL树,输出该树的前序,中序和高度*/
/*AVL 平衡二叉排序树*/
typedef struct tree
{
DataType d;
struct tree *lchild,*rchild;
}Tree,*PTree;
/*接受控制台一串数的输入,从小到大排序*/
void inputData(int a[],int *al )
{
int i,j,temp;
int flag = 0;
*al=0;
do
{
scanf("%d",&i);
if(i==-9999)break;
a[(*al)++]=i;
}while(9);
//冒泡排序
for(i=0;i<*al;i++)
{
flag=0;
for(j=0;j<*al-i;j++)
if(a[j]<a[j+1])
{
flag=1;
temp=a[j];a[j]=a[j+1];a[j+1]=temp;
}
if(flag==0)break;
}
}
//r表示根节点
void insertSortTree(PTree *r,int x)
{
PTree p,q;
q=(PTree)malloc(sizeof(Tree));
q->d=x;
q->lchild=NULL;q->rchild=NULL;
if(*r==NULL)
{
*r=q;return;
}
p=*r;
/*
while(p)
{
if(p->d>x)
p=p->lchild;
else
p=p->rchild;
}
p=q; 该注释地方同下面有什么不一样的吗?*/
while(1)
{
if(x<p->d)
if(p->lchild)
p=p->lchild;
else
{
p->lchild=q;
return;
}
else
if(p->rchild)
p=p->rchild;
else
{
p->rchild=q;return;
}
}
}
//通过此调用,让数据两端达到平衡
void createAVL(int a[],int s,int e,PTree *p)
{
int mid;
if(s>e)return;
mid=(s+e)/2;
printf("%d ",a[mid]);//依次将节点插入到平衡二叉树
insertSortTree(p,a[mid]);
createAVL(a,s,mid-1,p);
createAVL(a,mid+1,e,p);
}
void inOrder(PTree r)
{
if(r)
{
inOrder(r->lchild);
printf("%d ",r->d);
inOrder(r->rchild);
}
}
void main()
{
int a[MAX],al;
PTree p=NULL;
inputData(a,&al);
createAVL(a,0,al-1,&p);
printf("前序:");
inOrder(p);
}
分享到:
相关推荐
- 自平衡二叉排序树:如AVL树和红黑树,通过旋转操作保持树的平衡,确保插入、查找和删除操作的平均时间复杂度为O(log n)。 8. **应用**: - 数据库索引:二叉排序树常用于数据库和文件系统的索引结构。 - 搜索...
这个实现包括了对二叉搜索树的基本操作,如插入节点、计算高度等。 首先,`BinNodeptr` 类是二叉树节点的定义,它包含三个成员变量: 1. `int it`: 存储节点的整数值。 2. `BinNodeptr* Left`: 指向左子节点的指针...
对于深度为4的AVL树,最少结点数为9(包括根结点)。 9. **题目:** 一棵深度为k的AVL树,其每个分支结点的平衡因子均为0,则该平衡二叉树共有〔〕个结点。 - **选项:** - A. 2^(k-1)-1 - B. 2^(k-1)+1 - C. 2...
1. 二叉排序树(BST)是一种特殊的二叉树,其中每个节点的左子树只包含比其键值小的节点,右子树只包含比其键值大的节点。选项C正确,当逐点插入法构造BST时,如果插入的关键字有序,树会退化成链表,深度最大。选项...
LCM是两个或多个整数共有的倍数中最小的一个,要找到1到N之间三个数的最大LCM,一种可能的方法是选取接近N的平方根的数作为基数,并考虑其倍数。 3. K好数(ALGO-3) K好数问题属于组合数学领域,通过动态规划可以...
在本文中,我们将深入探讨一个名为“区域和检索 - 数组不可变”的问题,以及如何通过...如果内存限制严格,可能需要考虑其他解决方案,如平衡二叉搜索树(如AVL树或红黑树),它们可以在O(log n)的时间内完成范围查询。
- 具体步骤包括从一个顶点开始,逐渐加入距离当前生成树最近的顶点及其相连的边,直到包含所有顶点为止。 #### 9. **哈夫曼编码** - **题目描述**:给出一组字符频率 `{n1, n2, ..., n8}`,分别为 `{5, 25, 3, 6,...
AVL树是一种高度平衡的二叉搜索树,确保任何时间树的高度保持在O(log n)。 5. 图的遍历和深度优先搜索(DFS):题目5涉及图的深度优先搜索算法,这要求对图的遍历方法和深度优先搜索的工作原理有深入理解。 6. ...
这是一个典型的AVL树问题。AVL树是一种自平衡二叉查找树,在任何节点处,两子树的高度差最多为1。本题中,所有非叶结点的平衡因子为1,意味着每个非叶结点都有一个孩子结点比另一个孩子结点高1层。根据平衡二叉树的...
这段代码通过位运算来实现,具体步骤包括:将整数按位与一个特定的掩码,然后右移位并加和,最后再次按位与和右移位,直到最终结果为1或非1,以此判断原数是否为2的幂。这种算法利用了二进制表示中2的幂的特性,即...
2. **树形结构**:包括二叉树、平衡树(如AVL树和红黑树)、堆(最大堆和最小堆)、B树和B+树等。二叉树是最简单的树形结构,每个节点最多有两个子节点。平衡树则通过保持平衡因子来确保搜索效率,如AVL树要求左右...
在给定的例子中,`INTVEC`定义了一个包含10个整数的数组类型,`PF`定义了一个指向无参数函数的指针,该函数返回void。 复习内容聚焦于以下几个重点: 1. 树的基本概念:包括树的定义、特性以及存储结构。 2. 二叉树...
**知识点解析:** Prim算法是一种用于构造图的最小生成树的算法,它从一个顶点开始逐步扩展,每次选择与已包含顶点集合相连的未包含顶点中边权最小的一条边加入到生成树中,直至所有的顶点都被包含进去。...
- 树:二叉树、平衡树(AVL树、红黑树)等,用于高效查找和操作。 - 图:邻接矩阵和邻接表,用于表示节点之间的关系。 8. **递归与分治**: - 快速幂运算:高效计算幂次的算法。 - 大整数乘法:Karatsuba和Toom...
8. **数据结构**:包括栈、队列、链表、树(二叉树、AVL树、红黑树等)、图等,它们是实现算法的基础。 9. **计算几何**:如线段树、凸包算法等,广泛应用于图形学和地理信息系统。 10. **数学算法**:如大整数...
这个名为“最值得下载的数据结构与算法”的压缩包文件,很可能包含了一系列关于这个主题的深入教程、文档或电子书,如CHM格式的《数据结构与算法》。CHM(Compiled HTML Help)是一种微软推出的帮助文件格式,它将...
为了保持树的平衡,可以使用自平衡二叉搜索树如AVL树或红黑树。 - **定义**:定义一个二叉搜索树节点通常包括值、指向左右子节点的指针等成员。 - **实现**:实现二叉搜索树的操作如插入、删除和查找等。 - **...
13. **二进制补码表示整数**:由3个1和5个0组成的8位二进制补码,最高位为符号位,1表示负数,补码表示最小的负整数是`10000011`,转换为十进制为-125。 14. **浮点数加减运算**:对阶操作不会引起阶码的溢出,但右...
6. 树形结构:如红黑树、AVL树、Splay树、替罪羊树、Fibonacci堆、Treap等,用于保持平衡以实现高效的查找和插入。 7. KDtree、四分树、笛卡尔树、划分树等:特定类型的空间分割树,用于三维或多维数据索引。 ...
下面,我们将深入探讨这个程序集中可能包含的一些核心算法和它们的应用。 1. 排序算法: - 冒泡排序:简单的交换排序,适用于小规模数据。 - 选择排序:每次找出最小元素放在正确位置,适合数据量不大的情况。 -...