数据结构实验之查找二:平衡二叉树
Time Limit: 400ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根。
输入
输入一组测试数据。数据的第1行给出一个正整数N(n <= 20),N表示输入序列的元素个数;第2行给出N个正整数,按数据给定顺序建立平衡二叉树。
输出
输出平衡二叉树的树根。
示例输入
5 88 70 61 96 120
示例输出
70
#include<bits/stdc++.h> using namespace std; struct node { int data; int height; node *left; node *right; }; int height(node *root) { if(root==NULL)return 0; return root->height; } node* LL(node *root) { node* temp; temp=root->left; root->left=temp->right; temp->right=root; root->height=max(height(root->left),height(root->right))+1; temp->height=max(height(temp->left),height(temp->right))+1; return temp; } node* RR(node *root) { node*temp; temp=root->right; root->right=temp->left; temp->left=root; root->height=max(height(root->left),height(root->right))+1; temp->height=max(height(temp->left),height(temp->right))+1; return temp; } node* LR(node *root) { root->left=LL(root->left); return LL(root); } node* RL(node *root) { root->right=RR(root->right); return RR(root); } node* creat(node *root,int data) { if(root==NULL) { root=new node; root->data=data; root->left=root->right=NULL; root->height=1; } else if(data>root->data) { root->right=creat(root->right,data); if(height(root->right)-height(root->left)==2) { if(data>root->right->data)root=RR(root); else root=RL(root); } } else if(data<root->data) { root->left=creat(root->left,data); if(height(root->left)-height(root->right)==2) { if(data>root->left->data)root=LR(root); else root=LL(root); } } root->height=max(height(root->left),height(root->right))+1; return root; } int main() { node *root=NULL; int num; cin>>num; for(int i=0;i<num;i++) { int data; cin>>data; root=creat(root,data); } printf("%d\n",root->data); }