平衡二叉树(AVL)结点删除操作

结点的删除向来是二叉树的操作中的难点,平衡二叉树中结点删除相对更是复杂,由于删除结点操作以后还要保持其平衡的特征,

所以给我们删除的操作带来了一些小麻烦!

之前的文章我写过一个关于AVL树的结点插入的操作,当时我在二叉树结点的定义中加入了一个height的参数,这个参数表示以该

结点为根的子树的深度。在本文中我将这个参数删掉,利用一个方法Depth(),来求该结点的深度!如果读者有兴趣,自己把这个参数的操作

加进去,难度不会很大,逻辑对了就OK。 虽然因此效率低了不少,不过难度降低了不少!


好依然首先把结点结构定义打出来:

typedef int ElemType;

typedef struct Node
{
	ElemType	  data;
	struct Node	* lchild;
	struct Node	* rchild;
}avlNode,*avlTree;

删除结点的操作依然需要分几种情况来分析:


1、假如要删除的结点是一片叶子,即叶子结点:

那么直接删除这个结点,然后从它的父节点开始判断结点被删除以后是否依然满足平衡的特性,利用递归一直判断到根结点为止,

利用递归很容易解决。

2、非叶子结点的删除&

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值