3374->数据结构实验之查找二:平衡二叉树
2018-12-23 23:11
155 查看
#include<bits/stdc++.h> using namespace std; struct node { int data,dp; //定义data临时数据,dp为数的深度 node *l,*r; //定义l和r是树的左右节点 }; int deep(node *tree) { if(tree==NULL) return -1; //这个很重要如果树的节点为空深度为-1,也可以更改为0,看个人喜好 return tree->dp; //其他就return tree->dp就行了 } node *LL(node *tree) //定义右旋函数 { node *p=tree->l; tree->l=p->r; p->r=tree; p->dp=max(deep(p->l),deep(p->r))+1; tree->dp=max(deep(tree->l),deep(tree->r))+1; return p; } node *RR(node *tree) //定义左旋函数 { node *p=tree->r; tree->r=p->l; p->l=tree; p->dp=max(deep(p->l),deep(p->r))+1; tree->dp=max(deep(tree->l),deep(tree->r))+1; return p; } node *LR(node *tree) { tree->l=RR(tree->l); //LR类型先通过左旋转换成LL类型,再右旋 return LL(tree); } node *RL(node *tree) { tree->r=LL(tree->r); //RL类型先通过右旋转换成RR类型,再左旋 return RR(tree); } node *insert_(node *tree,int x) //这就是本题的精髓所在了,为建立平衡二叉树的主函数 { if(tree==NULL) //这个应该很清楚了吧,就是让第一个元素当成树头 { tree=new node; tree->data=x; tree->dp=0; tree->l=tree->r=NULL; } else if(x<tree->data) { tree->l=insert_(tree->l,x); //如果要插入的元素小于头,就往左找 if(deep(tree->l)-deep(tree->r)>1) //此时不平衡,要旋转 { if(x<tree->l->data) tree=LL(tree); else tree=LR(tree); } } else if(x>tree->data) //如果要插入的元素大于头,就往右找,注意这里不能直接填else,否则会Runtime error,目的是为了保持程序的稳定性。 { tree->r=insert_(tree->r,x); if(deep(tree->r)-deep(tree->l)>1) { if(x<tree->r->data) tree=RL(tree); else tree=RR(tree); } } tree->dp=max(deep(tree->l),deep(tree->r))+1; return tree; } int main() { int n,m; cin>>n; node *tree=NULL; for(int i=0; i<n; i++) { cin>>m; tree=insert_(tree,m); } cout<<tree->data<<endl; return 0; }
相关文章推荐
- 数据结构实验之查找二:平衡二叉树【OJ--3374】
- SDTU(3374) 数据结构实验之查找二:平衡二叉树
- SDUT 3374 数据结构实验之查找二:平衡二叉树
- 3374-数据结构实验之查找二:平衡二叉树
- 3374 数据结构实验之查找二:平衡二叉树
- SDUT-3374 数据结构实验之查找二:平衡二叉树
- SDUT 3374 数据结构实验之查找二:平衡二叉树
- (模板题)sdut 3374 数据结构实验之查找二:平衡二叉树(平衡二叉树的建立)
- 数据结构实验之查找二:平衡二叉树---3374
- 3374 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构上机实验之二分查找之平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUTACM 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树