PAT A 1066. Root of AVL Tree (25)
来源:互联网 发布:php用户管理系统代码 编辑:程序博客网 时间:2024/06/06 08:05
题目
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Figures 1-4 illustrate the rotation rules.
Now given a sequence of insertions, you are supposed to tell the root of the resulting AVL tree.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer N (<=20) which is the total number of keys to be inserted. Then N distinct integer keys are given in the next line. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print ythe root of the resulting AVL tree in one line.
Sample Input 1:
588 70 61 96 120
Sample Output 1:
70
Sample Input 2:
788 70 61 96 120 90 65
Sample Output 2:
88
平衡二叉树调整问题
代码:
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;struct node//树中的点{node *left;node *right;int val;//值int height;//高度,从0开始计数node(int v=0,node *l=NULL,node *r=NULL,int h=0):val(v),left(l),right(r),height(h){};};int Get_height(node *n);//返回高度,可以处理NULLbool Is_balance(node *l,node *r);//是否平衡node* insert(node *root,int val);//将val插入以root为根的平衡树中node* Rotleft(node *root);//左转node* Rotright(node *root);//右转int main(){int n;cin>>n;int i,temp;node *root=NULL;for(i=0;i<n;i++){scanf("%d",&temp);root=insert(root,temp);}cout<<root->val;return 0;}int Get_height(node *n){if(n==NULL)return -1;elsereturn n->height;}bool Is_balance(node *l,node *r){return abs(Get_height(l)-Get_height(r))<2;}node* insert(node *root,int val)//递归调用,直到获得NULL,即插入位置{if(root==NULL){root=new node(val);return root;}if(val<root->val)//比值小,插入到左子树中{root->left=insert(root->left,val);if(!Is_balance(root->left,root->right))//保持平衡性{if(val<root->left->val)//插入在左子树的左子树root=Rotright(root);else//插入在左子树的右子树{root->left=Rotleft(root->left);root=Rotright(root);}}}else//比值大,插入到右子树中{root->right=insert(root->right,val);if(!Is_balance(root->left,root->right))//保持平衡性{if(val>root->right->val)//插入在右子树的右子树root=Rotleft(root);else//插入在右子树的左子树{root->right=Rotright(root->right);root=Rotleft(root);}}}root->height=max(Get_height(root->left),Get_height(root->right))+1;return root;}node* Rotleft(node *root)//节点左转{node *t=root->right;root->right=t->left;t->left=root;root->height=max(Get_height(root->left),Get_height(root->right))+1;t->height=max(Get_height(t->left),Get_height(t->right))+1;return t;}node* Rotright(node *root)//节点右转{node *t=root->left;root->left=t->right;t->right=root;root->height=max(Get_height(root->left),Get_height(root->right))+1;t->height=max(Get_height(t->left),Get_height(t->right))+1;return t;}
- pat(A) 1066. Root of AVL Tree
- PAT A 1066. Root of AVL Tree (25)
- 【PAT】1066. Root of AVL Tree (25)
- 【PAT】1066. Root of AVL Tree (25)
- PAT 1066. Root of AVL Tree (25)
- PAT 1066. Root of AVL Tree (25)
- pat 1066. Root of AVL Tree (25)
- PAT 1066. Root of AVL Tree (25) (AVL树)
- PAT 1066. Root of AVL Tree
- PAT 1066. Root of AVL Tree
- PAT 1066. Root of AVL Tree
- 【PAT】1066. Root of AVL Tree
- PAT A1066. Root of AVL Tree (25)
- PAT A1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)-PAT甲级真题
- 【PAT甲级】1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25) PAT甲级
- 未完成-PAT甲级练习1066. Root of AVL Tree (25)
- acd LCM Challenge(求1~n的任意三个数的最大公倍数)
- Spring集合类型的bean及其注入方法
- 二叉树的线性存储
- Leetcode 解题报告整理索引(更新至154题)
- 二叉树的三叉存储
- PAT A 1066. Root of AVL Tree (25)
- [LeetCode] Remove Element
- C++代理类设计(一)
- git上传war大小限制处理方法
- acd The Game about KILL(和约瑟夫归则一样,归律)
- PAT A 1067. Sort with Swap(0,*) (25)
- dispatch_once的使用
- ubuntu 64位不支持adb,多架构支持,安装ia32-libs解决--适用ubuntu 12.04以后版本
- linux oracle 安装错误 系统参数小于要求的参数 Error Message:PRVF-4353 PRVF-4354