- 相關(guān)推薦
AVL樹的c語言實(shí)現(xiàn)
導(dǎo)語:C語言的設(shè)計(jì)目標(biāo)是提供一種能以簡易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語言。下面我們來看看AVL樹的c語言實(shí)現(xiàn),希望對(duì)大家有所幫助。
AVL樹的c語言實(shí)現(xiàn):在計(jì)算機(jī)科學(xué)中,AVL樹是最先發(fā)明的自平衡二叉查找樹。在AVL樹中任何節(jié)點(diǎn)的兩個(gè)子樹的高度最大差別為一,所以它也被稱為高度平衡樹。查找、插入和刪除在平均和最壞情況下都是O(log n)。增加和刪除可能需要通過一次或多次樹旋轉(zhuǎn)來重新平衡這個(gè)樹。
1.節(jié)點(diǎn)
(1)節(jié)點(diǎn)的定義
1 2 3 4 5 6 7 8 9 | typedef int KeyType; typedef struct AvlNode { KeyType key; //數(shù)據(jù) AvlNode *leftchild; //左孩子 AvlNode *rightchild; //右孩子 AvlNode *parent; //雙親結(jié)點(diǎn) int balance; //平衡因子 }AvlNode,*AvlTree; |
(2)結(jié)點(diǎn)的創(chuàng)建
1 2 3 4 5 6 7 8 9 10 11 12 | AvlNode *BuyNode() { AvlNode *p =(AvlNode *)malloc(sizeof(AvlNode)); if ( p != NULL) { p->leftchild = NULL; p->rightchild = NULL; p->parent = NULL; p->balance = 0 ; } return p; } |
2.旋轉(zhuǎn)
如果在AVL樹中進(jìn)行插入或刪除節(jié)點(diǎn)后,可能導(dǎo)致AVL樹失去平衡。這種失去平衡的可以概括為4種姿態(tài):左單旋轉(zhuǎn),右單旋轉(zhuǎn),左平衡,右平衡。(1)左單旋轉(zhuǎn):也叫左左旋轉(zhuǎn)。
【AVL樹的c語言實(shí)現(xiàn)】相關(guān)文章:
C語言程序的實(shí)現(xiàn)09-27
C語言的HashTable簡單實(shí)現(xiàn)10-12