平衡二叉树(AVL)

平衡二叉树首先是一棵二叉排序树
二叉排序树:对于每个节点,左孩子比本身小,右孩子比本身大
首先我们来实现一个二叉排序树。

//节点结构体
struct TreeNode{
   
	int val;	//节点值
	TreeNode* left;
	TreeNode* right;
	
	TreeNode(int val){
   		//结构体构造方法
		this->val = val;
		this->left=NULL;
		this->right=NULL;
	}
};

然后是二叉排序树的插入算法

TreeNode* insert1(TreeNode* root,int val){
   
	if(root==NULL){
   
		root =new TreeNode(val);
		return root;
	}
	int temp = root->val;
	if(val<temp){
   
		root->left = insert1(root->left,val);
	}
	if(val>temp){
   
		root->right = insert1(root->right,val);
	}
	return root;
}

很简单,就是如果节点为NULL,就新建节点
否则跟节点进行比较,如果比节点值小就向左子树递归,否则向右子树递归

二叉排序树的查找平均时间复杂度:O(lgn)
平均插入时间复杂度:O(lgn)

二叉排序树的缺点
当结点值的插入顺序是有序的话,插入和查找都退化成O(n) 树退化成一条链表 例如按照 1,2,3,4,5的顺序构建一棵二叉排序树
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值