|
数据结构与算法(C#实现)系列---AVLTree(一) using System; using System.Collections; namespace DataStructure { /// /// AVLTree 的摘要说明。-----平衡二叉查找树 /// public class AVLTree:BST { protected int height;//空树的高定义为-1; //构造一棵空的二叉查找树 public AVLTree():base() { // // TODO: 在此处添加构造函数逻辑 // height=-1; } public AVLTree(object _obj):base(_obj) { height=0; } //------------------------------------------------------------------ protected override object GetEmptyInstance(uint _degree) { return new AVLTree(); } //------------------------------------------------------------------ protected int BalanceFactor() { if (this.IsEmpty() ) return 0; return ((AVLTree)this.Left).height-((AVLTree)this.Right).height; } //调整高度 protected void AdjustHeight(){ this.height=Math.Max( ((AVLTree)this.Left).height, ((AVLTree)this.Right).height)+1; } //平衡时的四种旋转方式 protected void LLRotation() { if( this.IsEmpty() ) throw new Exception("My:invalid operation!"); AVLTree avlB=new AVLTree(this.key); avlB.AttachSubtree(1,(AVLTree)this[0][1]); avlB.AttachSubtree(2,(AVLTree)this[1]);
this.key=this[0].Key; this[0]=this[0][0]; this[1]=avlB; //调整两个节点的高度 ((AVLTree)this.Right).AdjustHeight(); this.AdjustHeight(); } protected void LRRotation() { if( this.IsEmpty() ) throw new Exception("My:invalid operation!"); ((AVLTree)this.Left).RRRotation(); this.LLRotation(); } protected void RRRotation() { if( this.IsEmpty() ) throw new Exception("My:invalid operation!"); AVLTree avlB=new AVLTree(this.key);
avlB.AttachSubtree(1,(AVLTree)this[0]); avlB.AttachSubtree(2,(AVLTree)this[1][0]); //avlA.AttachSubtree(1,avlB);
//this=avlA; this.key=this[1].Key; this[0]=avlB; this[1]=this[1][1]; //调整两个节点的高度 ((AVLTree)this.Left).AdjustHeight(); this.AdjustHeight(); } protected void RLRotation() { if( this.IsEmpty() ) throw new Exception("My:invalid operation!"); ((AVLTree)this.Right).LLRotation(); this.RRRotation(); } |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8781179/viewspace-924559/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8781179/viewspace-924559/
本文介绍了使用C#实现AVL树的过程,包括基本概念、关键操作如插入、删除及旋转等,并详细解释了如何通过调整高度保持树的平衡。
1585

被折叠的 条评论
为什么被折叠?



