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;
}

 

posted @ 2021-10-31 17:26  我吃白葡萄  阅读(200)  评论(0)    收藏  举报