我的心愿是世界和平!
平衡二叉树:不想写定义~~(可以写,但是没必要)~~
#include<cstdio>
#include<iostream>
using namespace std;
typedef struct node{
int data;
int height;
struct node *left;
struct node *right;
}*tree,Tree;
int Height(tree &T,int len)
{
if(T == NULL) return len;
if(T->left == NULL && T->right == NULL) return T->height;
return max(Height(T->left,T->height),Height(T->right,T->height));
}
void change(tree &T,int len){
if(T == NULL) return ;
T->height = len;
change(T->left,len+1);
change(T->right,len+1);
}
//单旋转右旋
void singleRotateWithRight(tree &T)
{
int t = T->height;
tree L = T;
T = L->left;
L->left = T->right;
T->right = L;
T->height = t;
change(T->left,t+1);
change(T->right,t+1);
}
//单旋转左旋
void singleRotateWithLeft(tree &T)
{
int t = T->height;
tree R = T;
T = R->right;
R->right = T->left;
T->left = R;
T->height = t;
change(T->left,t+1);
change(T->right,t+1);
}
//双旋转,先左后右
void doubleRotateWithLeft(tree &T)
{
singleRotateWithLeft(T->left);
singleRotateWithRight(T);
}
//双旋转,先右后左
void doubleRotateWithRight(tree &T)
{
singleRotateWithRight(T->ri