AVL Tree implementation
AVL Tree implementation
这是我用于AvlTree实现的代码,但是有一个错误,当我运行时,它说运行时失败:P没有初始化以及如何修复我的代码?在这里
#include "avltree.h";
#include "fatal.h";
//#include<iostream>
#include<stdlib.h>
//using namespace std;
struct AvlNode
{
ElementType Element;
AvlTree left;
AvlTree right;
int Height;
};
AvlTree MakeEmpty(AvlTree T)
{
if (T!=NULL)
{
MakeEmpty(T->left);
MakeEmpty(T->right);
free(T);
}
return NULL;
}
Position Find(ElementType X,AvlTree 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;
}
Position FindMin(AvlTree T)
{
if (T==NULL)
return NULL;
else
if (T->left=NULL)
return T;
else
return FindMin(T->left);
}
Position FindMax(AvlTree T){
if(T!=NULL)
while(T->right!=NULL)
T=T->right;
return T;
}
static int Height(Position P)
{
if (P==NULL)
return -1;
else
return P->Height;
}
static int Max(int Lhs,int Rhs){
return Lhs>Rhs?Lhs:Rhs;
}
static Position rotateleft(Position K2)
{
Position K1;
K1=K2->left;
K2->left=K1->right;
K1->right=K2;
K2->Height=Max(Height(K2->left),Height(K2->right))+1;
K1->Height=Max(Height(K1->left),K2->Height)+1;
return K1;
}
static Position rotateright(Position K1)
{
Position K2;
K2=K1->right;
K1->right=K2->left;
K2->left=K1;
K1->Height=Max(Height(K1->left),Height(K1->right))+1;
K2->Height=Max(Height(K2->right),K1->Height)+1;
return K2;
}
static Position DoubleLeft(Position K3)
{
K3->left=rotateright(K3->left);
return rotateleft(K3);
}
static Position DoubleRight(Position K1){
K1->right=rotateleft(K1->right);
return rotateright(K1);
}
AvlTree Insert(ElementType X,AvlTree T)
{
if (T==NULL)
{
T=(AvlNode*)malloc(sizeof(struct AvlNode));
if (T==NULL)
FatalError("Out of space");
else
{
T->Element=X;T->Height=0;
T->left=T->right=NULL;
}
}
else
if (X<T->Element)
{
T->left=Insert(X,T->left);
if (Height(T->left)-Height(T->right)==2)
if (X<T->left->Element)
T=rotateleft(T);
else
T=DoubleLeft(T);
}
else
if (X>T->Element)
{
T->right=Insert(X,T->right);
if(Height(T->right)-Height(T->left)==2)
if(X>T->right->Element)
T=rotateright(T);
else
T=DoubleRight(T);
}
T->Height = Max( Height( T->left ), Height( T->right ) ) + 1;
return T;
}
AvlTree Delete( ElementType X, AvlTree T )
{
printf( "Sorry; Delete is unimplemented; %d remainsn", X );
return T;
}
ElementType Retrieve(Position P)
{
return P->Element;
}
int main(){
AvlTree T;
Position P;
int i;
int j=0;
T=MakeEmpty(NULL);
for (i=0;i<50;i++,j=(j+7)%50)
T=Insert(j,T);
for (i=0;i<50;i++)
if (P==Find(i,T)==NULL || Retrieve(P)!=i)
printf( "Error at %dn", i );
printf( "Min is %d, Max is %dn", Retrieve( FindMin( T ) ),
Retrieve( FindMax( T ) ) );
return 0;
}
我相信
错误是你在这里使用了double =:
if (P==Find(i,T)==NULL || Retrieve(P)!=i)
printf( "Error at %dn", i );
这个想法是让 P 存储 Find 的值,对吧?
您尚未包含文件"avltree.h",因此任何人都无法编译此代码。
但是,有一个错误很突出:
if (P==Find(i,T)==NULL || Retrieve(P)!=i)
^^ this is not an assignment
我想你想要:
if ((P=Find(i,T))==NULL || Retrieve(P)!=i)
我认为这就是问题所在:
if (P==Find(i,T)==NULL || Retrieve(P)!=i)
由于P
未被分配且尚未初始化,因此P
不会NULL
这意味着第一个条件将返回false
并且Retrieve()
将使用未初始化的P
调用。
应该是:
if ( (P = Find(i,T)) == NULL || Retrieve(P)!=i)
int main(){
AvlTree T ();
Position P ();
相关文章:
- Softmax Implementation in C++
- 使用 boost::p roperty_tree::p tree 如何获取特定键的值
- 在陈述"Implementation-defined"时,什么样的软件是"Implementation"的一部分?究竟什么是"Implementation"?
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- STL binary_search() implementation
- Android Studio 3.1.2 - 无法运行C++子例程"No implementation found for Java.lang.String..."
- Vivado HLS implementation of RISCV
- C++ Class implementation
- Boost R-Tree中的最小边界矩形计算
- c++ is_member_pointer implementation
- shared_mutex C++11 implementation
- VC++ implementation of std::promise
- C++ EXC_BAD_ACCESS (Binary Tree)
- libc++ implementation of std::condition_variable_any
- Boost::p tree - 访问列表中包含的属性树节点
- Deserilizing n-ary tree
- Balancing KD Tree
- Paypal implementation...c++
- k-d tree implementation
- AVL Tree implementation