平衡二叉树

本文介绍了平衡二叉树的概念,包括其性质、平衡因子和高度关系。详细阐述了如何判断一个二叉树是否为平衡二叉树,并提供了平衡因子大于1时的旋转操作(LL、RR、LR、RL)以保持平衡。此外,还讨论了AVL树的插入、删除操作及其在映射和集合中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

满二叉树一定是一颗平衡二叉树
平衡二叉树:对于任意一个节点,左子树和右子树的高度差不能超过1
平衡二叉树的高度和节点数量之间的关系也是O(logn)的
节点的高度等于左右子树中最高的节点的高度 加一
平衡因子:左右子树的高度差(较大的减较小的)或者左右 子树高度差的绝对值
如果平衡因子大于1,则不是一棵平衡二叉树,不大于1则是一颗平衡二叉树
我们在原来的二分搜索树的基础上加上height,获得这个节点的高度就好了,我们要判断下这个节点是否存在,存在返回节点的高度,不存在直接返回0,。添加操作时对左右节点的高度值进行维护让左右子树高度值最大值 +1 ;具体的实现代码如下:

	private class Node{
		 public K key;
		 public V value;
		 public Node left,right;
		 private int height;
		 public Node(K key,V value) {
			 this.key = key;
			 this.value = value;
			 left = null;
			 right = null;
			 height = 1;
		 }
	 }
	private Node root;
	private int size;
	public AVLTree() {
		root = null;
		size = 0;
	}
	public int getSize() {
		return size;
	}
	public boolean isEmpty() {
		return size == 0;
	}
	//获得节点node的高度
	private int getHeight(Node node) {
		if(node == null) {
			return 0;
		}
		return node.height;
	}
	//获得节点node的平衡因子
	private int getBalanceFactor(Node node) {
		if(node == null) {
			return 0;
		}
		return getHeight(node.left) - getHeight(node.right);
		}
	//向二分搜索树种添加新的元素(key,value)
		 public void add(K key,V value) {
			 root = add(root,key,value);
		 }
		 //向以node为根的二分搜索树中插入元素(key,value),递归算法
		 //返回插入新节点后二分搜索树的根
		 private Node add(Node node, K key,V value) {
			 if(node == null) {
				 size++;
				 return new Node(key,value);
			 }
			 
			 if(key.compareTo(node.key) < 0) {
				 node.left = add(node.left,key,value);
			 }else if(key.compareTo(node.key) > 0) {
				 node.right  = add(node.right,key,value);
			 }else {
				 node.value = value;
			 }
			 //更新height
			 node.height = 1 + Math.max(getHeight(node.left), getHeight(node.right));
			 //计算平衡因子
			 int balan
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值