avl树建立框架

这个代码不全, 只是一个大概的框架

#include<iostream>
using namespace std;
struct avltree{
int height;
int data;
struct avltree*right;
struct  avltree*left;
}

int mymax(int a, int b){
return a>b?a:b;
}
int Getheight(struct avltree*p){
if(p==NULL)
    return 0;
    else
        return p->height;
}
struct avltree*rr(struct avltree *p){
struct avltree *m;
m=p->left;
p->left=m->right;
m->right=p;
p->height=mymax(Getheight(p->left),Getheight(p->right))+1;
m-height=mymax(Getheight(m->left),Getheight(m->right))+1;
return m;
};
struct avltree *ll(struct avltree *p){
struct avltree *m;
m=p->right;
p->right=m->left;
m->left=p;
p->height=mymax(Getheight(p->left),Getheight(p->right))+1;
m-height=mymax(Getheight(m->left),Getheight(m->right))+1;
return m;
};

struct avltree* rl(struct avltree *p){
struct avltree *m;
p->left=rr(p->left);
p=ll(p);
return p;
};
struct avltree* lr(struct avltree *p){
struct avltree *m;
p->right=ll(p->right);
p=rr(p);
return p;
};
struct avltree *insert_tree(int x, struct avltree*p){
if(p==NULL){

    p= new struct avltree;
     p->data=x;
     p->left=NULL;
         p->right=NULL;
         p->height=0;
}
else if(x>p->data){
   p->right=insert_tree(x,p->right);
  if(){
}
//以下是判断平衡树需要进行哪一种变换
}
else {
   p->left=insert_tree(x,p->left);
   if){
//判断进行哪一种操作的条件
}
  p->height=mymax(Getheight(p->left),Getheight(p->right))+1;
return p;
};
int main(){
int n ;
cin>>n;
int node;
struct avltree *p=NULL;
for(int i=1;i<=n;i++){
    cin>>node;
    p=insert_tree(node,p);
}
return 0;
}

说明:每一次插入结束时要更新节点的高度,这样使用Getheight()方式可以返回左右子树的高度。

发布了6 篇原创文章 · 获赞 5 · 访问量 2421

猜你喜欢

转载自blog.csdn.net/weixin_44724691/article/details/104729835