【平衡树】二叉树

#include
#include
#include<stdlib.h>
#include<time.h>
#include
#include
using namespace std;

typedef struct node* tree;

struct node
{
long int data;
node* left;
node* right;
};

int GetHeight(tree root)
{
int Hr, Hl, m;

if (!root)
{
	return 0;
}

Hl = GetHeight(root->left);

Hr = GetHeight(root->right);

return ( (Hr > Hl) ? Hr : Hl)+1;

}

tree LeftLeft(tree root)
{
tree b = root->left;

root->left = b->right;

b->right = root;

return b;

}

tree RightRight(tree root)
{
tree b = root->right;

root->right = b->left;

b->left = root;

return b;

}

tree LeftRight(tree root)
{
root->left = RightRight(root->left);

return LeftLeft(root);

}

tree RightLeft(tree root)
{
root->right = LeftLeft(root->right);

return RightRight(root);

}

typedef int Element;
tree buildtree(tree root, Element x)
{
if (!root)
{
root = new node;

	root->data = x;

	root->left = root->right = NULL;
}

if (x < root->data)
{
	root->left = buildtree(root->left, x);

	if (abs(GetHeight(root->left) - GetHeight(root->right)) == 2)
	{
		if (x < root->left->data)
		{
			root=LeftLeft(root);
		}
		else
		{
			root=LeftRight(root);
		}
	}
}
else
{
	root->right = buildtree(root->left, x);

	if (abs(GetHeight(root->left) - GetHeight(root->right)) == 2)
	{
		if (x < root->right->data)
		{
			root=RightLeft(root);
		}
		else
		{
			root=RightRight(root);
		}
	}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值