初学数据结构发表一下个人的看法。
# include <stdio.h># include <malloc.h>
struct BTnode {
char data;
struct BTnode * Lchild;
struct BTnode * Rchild;
};
struct BTnode * BTnode_Create(void);
void Ftraverse(struct BTnode *pBT);
void Mtraverse(struct BTnode *pBT);
void Etraverse(struct BTnode *pBT);
int main(void)
{
struct BTnode * Root = BTnode_Create();
printf("先序遍历:\n");
Ftraverse(Root); /* 先序遍历二叉树 */
printf("\n中序遍历:\n");
Mtraverse(Root); /* 中序遍历二叉树 */
printf("\n后序遍历:\n");
Etraverse(Root); /* 后序遍历二叉树 */
return 0;
}
/*
*
*
*函数功能:静态生成二叉树
*
*备注:
*
*/
struct BTnode * BTnode_Create(void)
{
struct BTnode * A_BTnode = (struct BTnode *)malloc(sizeof(struct BTnode));
struct BTnode * B_BTnode = (struct BTnode *)malloc(sizeof(struct BTnode));
struct BTnode * C_BTnode = (struct BTnode *)malloc(sizeof(struct BTnode));
struct BTnode * D_BTnode = (struct BTnode *)malloc(sizeof(struct BTnode));
struct BTnode * E_BTnode = (struct BTnode *)malloc(sizeof(struct BTnode));
A_BTnode->data = 'A';
A_BTnode->Lchild = B_BTnode;
A_BTnode->Rchild = C_BTnode;
B_BTnode->data = 'B';
B_BTnode->Lchild = NULL;
B_BTnode->Rchild = NULL;
C_BTnode->data = 'C';
C_BTnode->Lchild = D_BTnode;
C_BTnode->Rchild = NULL;
D_BTnode->data = 'D';
D_BTnode->Lchild = NULL;
D_BTnode->Rchild = E_BTnode;
E_BTnode->data = 'E';
E_BTnode->Lchild = NULL;
E_BTnode->Rchild = NULL;
return A_BTnode;
}
/*
*
*
*函数功能:先序遍历二叉树
*
*备注:
*
*/
void Ftraverse(struct BTnode *pBT)
{
if (NULL != pBT)
{
printf("%c\n", pBT->data );
if (NULL != pBT->Lchild)
Ftraverse(pBT->Lchild );
if (NULL != pBT->Rchild)
Ftraverse(pBT->Rchild );
}
}
/*
*
*
*函数功能:中序遍历二叉树
*
*备注:
*
*/
void Mtraverse(struct BTnode *pBT)
{
if (NULL != pBT)
{
if (NULL != pBT->Lchild)
Mtraverse(pBT->Lchild );
printf("%c\n", pBT->data );
if (NULL != pBT->Rchild)
Mtraverse(pBT->Rchild );
}
}
/*
*
*
*函数功能:后序遍历二叉树
*
*备注:
*
*/
void Etraverse(struct BTnode *pBT)
{
if (NULL != pBT)
{
if (NULL != pBT->Lchild)
Etraverse(pBT->Lchild );
if (NULL != pBT->Rchild)
Etraverse(pBT->Rchild );
printf("%c\n", pBT->data );
}
}
借着空余时间开始学习数据结构的一些基础知识, 看完书籍后就开始敲出一段二叉树的一些操作函数。 遍历二叉树时用到了递归, 就中序遍历而言就是先遍历根节点然后遍历左子树 最后 遍历右子树。这里我的理解是因为求解过程的模型就是一个递归, 所以用到递归时并不需要考虑每一步怎么实现的,因为递归能做好! 一点看法 希望前辈能提点建议。。。