AVL树非递归实现插入和删除例程

本文介绍了如何非递归地在AVL树中实现元素的插入和删除。通过使用栈来记录搜索路径,首先按照普通二叉树的方式执行操作,然后在回溯过程中更新节点的高度信息,并根据需要进行相应的旋转操作,以保持AVL树的平衡状态。
摘要由CSDN通过智能技术生成

原理:用一个栈把插入和删除时搜索路径记录下来,按照一般二叉树执行了插入,删除操作后再原路返回,修改高度信息和进行旋转操作使满足AVL平衡条件。

 

//AVL树模板(部分)
#ifndef AVLTree_h
#define AVLTree_h
#include <iostream>
#include <stack>  //记录删除时遍历路径
template<typename Comparable>
class AVLTree
{
private:
    struct AvlNode //树结点的定义
	{
    	Comparable element;
		AvlNode *left;
		AvlNode *right;
		int height;
		AvlNode(const Comparable &theElement,AvlNode *lt=NULL,AvlNode *rt=NULL,int h=0)
			:element(theElement),left(lt),right(rt),height(h){}
	};
         AvlNode *root; //根节点的声明
	inline int max(int a,int b)  //计算两整数最大值,在算树高度时总是用到
	{
		if(a>b)return a;
		else return b;
	}
	inline int height(AvlNode *t)const  //计算高度
          {
		return NULL==t ? -1 :t->height;
	}
	void adjust(AvlNode *&t)  //调整使符合AVL条件
	{
                  if(height(t->left)-height(t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值