c语言数据结构之树
这里我只写树的基本操作及实现,这里写的是二叉树,二叉树的操作有插入,删除,遍历,在写代码时首先要,创建一个树,如
typedef struct TreeNode
{
ElementType Element;
struct TreeNode* Left;
struct TreeNode* Right;
}TreeNode,*Pointer_btree; 这里创建了一个树,包括数据域x,左右子树指针,还有头指针btree
Pointer_btree
MakeEmpty( Pointer_btree T )
{
if( T != NULL )
{
MakeEmpty( T->Left );
MakeEmpty( T->Right );
free( T );
}
return NULL; 首先要进行初始化,这里用了做空,保证了树里面一开始没有任何元素,相当于初始化
插入,注意函数里面的写法,x表示你到时候要插入,删除,遍历的数,T表示一棵树,拿你要插入的数和根节点作比较,如果大于根节点则放到右子树里面,小于则放到左子树里面。这里没有相等时候的代码
Pointer_btree Insert( ElementType X, Pointer_btree T )
{
/* 1*/ if( T == NULL )
{
/* 2*/ T = malloc( sizeof( struct TreeNode ) );
/* 3*/
T->Element = X;T->Left = T->Right = NULL;
/* 5*/
/* 6*/ }
else
if( X < T->Element )
/* 8*/ T->Left = Insert( X, T->Left ); //这里是递归调用,这种写法要记住
/* 9*/ else
if( X > T->Element )
/*10*/ T->Right = Insert( X, T->Right );
return T;
删除 ,大于小于和插入同理,相等的时候判断,如果两个子树,找到最小值,替换,把要删除的替换到叶子结点上然后删除,如果只有一个子树
Pointer_btree Delete( ElementType X, Pointer_btree T )
{
Pointer_btree TmpCell;
if( X < T->Element )
T->Left = Delete( X, T->Left );
else if( X > T->Element )
T->Right = Delete( X, T->Right );
else
if( T->Left && T->Right ) /* Two children */
{
/* Replace with smallest in right subtree */
TmpCell = FindMin( T->Right );
T->Element = TmpCell->Element;
T->Right = Delete( T->Element, T->Right );
}
else /* One or zero children */
{
TmpCell = T;
if( T->Left == NULL ) /* Also handles 0 children */T = T->Right; //这里可以理解为,T的右子树的叶子结点直接等于这个树,
else if( T->Right == NULL )
T = T->Left;
free( TmpCell );
}
return T;
}
遍历,主要是递归
Pointer_btree Findd( ElementType X, Pointer_btree T )
{
if( T == NULL )
return NULL;
if( X < T->Element )
return Find( X, T->Left );
else
if( X > T->Element )
return Find( X, T->Right );
else
return T;
}
浙公网安备 33010602011771号