设为首页 加入收藏

TOP

C语言实现二叉树的常用的算法(递归与非递归实现遍历) (八)
2014-11-23 22:19:18 来源: 作者: 【 】 浏览:22
Tags:语言 实现 常用 算法

PreOrderTraverse(tree);

printf("\n中序遍历(#表示空子树):\n");
InOrderTraverse(tree);

printf("\n后序遍历(#表示空子树):\n");
PostOrderTraverse(tree);

printf("\n树的深度为:%d\n", GetDepth(tree));

printf("\n层序遍历:\n");
LevelOrderTraverse(tree);

printf("\n遍历叶子结点:\n");
TraverseLeafNodes(tree);



fclose(stdin);

printf("\n");
return 0;
}

二叉树实现文件及测试:
#include
#include

#include "BinaryTree.h"
#include "Queue.h"
#include "Stack.h"

/*****************************************************************************
* 方法名:CreateBinaryTree
* 描述: 递归创建一棵二叉树,按先序输入二叉树中结点的元素的值,“#”号表示空树
* 参数: pBTree--指向BTree结构体的指针的指针
* 返回值:返回OK--表示创建成功
* 返回ERROR--表示创建失败
******************************************************************************/
int CreateBinaryTree(BTree **pBTree)
{
ElemType data;

scanf("%c", &data);

if (data == '#')
{
*pBTree = NULL;

return OK;
}
else
{
if (((*pBTree) = (BTree *)malloc(sizeof(BTree))) == NULL)
{
exit(OVERFLOW);
}

(*pBTree)->data = data;
CreateBinaryTree(&(*pBTree)->lchild); // 创建左子树
CreateBinaryTree(&(*pBTree)->rchild); // 创建右子树
}

return OK;
}

/*****************************************************************************
* 方法名:PreOrderTraverse
* 描述: 先序遍历二叉树
* 参数: pBTree--指向BTree结构体的指针
******************************************************************************/
void PreOrderTraverse(BTree *pBTree)
{
if (pBTree)
{
printf("%c", pBTree->data); // 先序访问根结点

PreOrderTraverse(pBTree->lchild); // 先序遍历左子树
PreOrderTraverse(pBTree->rchild); // 先序遍历右子树
}
}

/*****************************************************************************
* 方法名:InOrderTraverse
* 描述: 中序遍历二叉树
* 参数: pBTree--指向BTree结构体的指针
******************************************************************************/
void InOrderTraverse(BTree *pBTree)
{
if (pBTree)
{
InOrderTraverse(pBTree->lchild); // 中序遍历左子树
printf("%c", pBTree->data); // 中序访问根结点
InOrderTraverse(pBTree->rchild); // 中序遍历右子树
}
}

/*****************************************************************************
* 方法名:PostOrderTraverse
* 描述: 后序遍历二叉树
* 参数: pBTree--指向BTree结构体的指针
******************************************************************************/
void PostOrderTraverse(BTree *pBTree)
{
if (pBTree)
{
PostOrderTraverse(pBTree->lchild); // 后序遍历左子树
PostOrderTraverse(pBTree->rchild); // 后序遍历右子树
printf("%c", pBTree->data); // 后序访问根结点
}
}

/*****************************************************************************
* 方法名:LevelOrderTraverse
* 描述: 层序遍历二叉树
* 参数: pBTree--指向BTree结构体的指针
******************************************************************************/
void LevelOrderTraverse(BTree *pBTree)
{
Queue queue; // 队列变量
QueueElemType e; // 队列元素指针变量

InitializeQueue(&queue); // 初始化队列

if (pBTree != NULL)
{
EnQueue(&queue, *pBTree); // 将根结点指针入队
}

while (!IsQueueEmpty(queue))
{
DeQueue(&queue, &e);

printf("%c", e.data);

if (e.lchild != NULL) // 若存在左孩子,则左孩子入队
{
EnQueue(&queue, *e.lchild);
}

if (e.rchild != NULL) // 若存在右孩子,则右孩子入队
{
EnQueue(&queue, *e.rchild);
}
}
}

/*****************************************************************************
* 方法名:GetDepth
* 描述: 获取树的深度
* 参数: pBTree-

首页 上一页 5 6 7 8 9 10 下一页 尾页 8/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言中malloc函数返回值是否需要.. 下一篇C语言中异常处理的两个函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: