您的位置:首页 > 理论基础 > 数据结构算法

数据结构:树

2015-07-26 11:53 274 查看


出现原因:对于大量的输入数据,链表的线性访问时间太慢

而树的大部分操作的运行时间平均为O(logN)

定义:n个结点的有限集合(n>0)

递归定义:1.根节点

2.除根节点的m个不相交有限集也是树,根的子树

树的实现:链表存储

typedef struct _node{

int value;

struct _node *brother;

struct _node *son;

}treenode;

*具有N个结点的每棵二叉树都需N+1个NULL指针

二叉树

定义:一颗每结点不多于2个儿子的树

typedef struct _node{

int value;

struct _node *left;

struct _node *right;

}treenode;

二叉查找树

定义:树中每个结点x,它的左子树中的所有关键字值小于x,它的右子树中所有关键字值大于x

对象集:二叉查找树

操作集:void Makeempty(treenode *T);

treenode *Find(teenode *T);

teenode *Findmin(treenode *T);

treenode *Findmax(treenode *T);

int Retrieve(treenode *T);

treenode *Insert(treenode *T);

treenode *Delete(treenode *T);

AVL树

带有自平衡条件的二叉查找树

*其操作是建立在二叉查找树的基础上

*其insert/delete需要旋转以达到自平衡的目的

旋转函数:

treenode *Singlerotatewithleft(treenode *k2);

treenode *Doublerotatewithleft(treenode *k3);

treenode *Singlerotatewithright(treenode *k1);

treenode *Doublerotatewithright(treenode *k1);

伸展树

B-树
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: