看了数据结构与算法树一章,决心写出AVL平衡树非递归插入算法。折腾两个晚上终于弄完,其中用到了C++中的栈模板,实在不想在写一个栈了。 总体实现思路如下:1. 若为空直接创建树2. 查找插入位置3. 插入4. 计算新树节点高度5.平衡新树
AvlTree InsertWithoutRecursion(int X, AvlTree T)
{
/** insert node into AVL tree with out recursion */
if (NULL == T)
{
T = (AvlTree)malloc(sizeof(AvlNode));
if(NULL == T)
{
printf("Out of range...\n");
return NULL;
}
T->Element = X;
T->Left = T->Right = NULL;
T->Height = 0;
return T;
}
/** find insert pos */
std::stack<Position> tail;
/* NodeT nodeTmp;*/
Position ParentNode = T;
while (ParentNode != NULL)
{
tail.push(ParentNode);
if (X == ParentNode->Element)
{
return T;
}
else if (X < ParentNode->Element)
{
if (ParentNode->Left == NULL)
{
break;
}
else
{
ParentNode = ParentNode->Left;
}
}
else