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

第十周--数据结构--二叉树遍历的递归算法

2015-11-19 21:49 316 查看
/*
  *第十周--数据结构--二叉树遍历的递归算法

  *Copyright (c) 2015 烟台大学计算机与控制工程学院
  *All right reserved.
  *文件名称:tree.cpp
  *writer:罗海员
  *date:2015年11月18日
  *版本:V1.0.1
  *操作系统:windows 8
  *运行环境:VC6.0
  * 问题描述:
  * 程序输出: 
*/

#include <stdio.h>
#define MaxSize 100
typedef char ElemType;
typedef struct node
{
ElemType data;              //数据元素
struct node *lchild;        //指向左孩子
struct node *rchild;        //指向右孩子
} BTNode;
void CreateBTNode(BTNode *&b,char *str);        //由str串创建二叉链
BTNode *FindNode(BTNode *b,ElemType x);     //返回data域为x的节点指针
BTNode *LchildNode(BTNode *p);  //返回*p节点的左孩子节点指针
BTNode *RchildNode(BTNode *p);  //返回*p节点的右孩子节点指针
int BTNodeDepth(BTNode *b); //求二叉树b的深度
void DispBTNode(BTNode *b); //以括号表示法输出二叉树
void DestroyBTNode(BTNode *&b);  //销毁二叉树

void PreOrder(BTNode *b);
void InOrder(BTNode *b);
void PostOrder(BTNode *b);

void PreOrder(BTNode *b)        //先序遍历的递归算法
{
if (b!=NULL)
{
printf("%c ",b->data);  //访问根节点
PreOrder(b->lchild);    //递归访问左子树
PreOrder(b->rchild);    //递归访问右子树
}
}

void InOrder(BTNode *b)         //中序遍历的递归算法
{
if (b!=NULL)
{
InOrder(b->lchild);     //递归访问左子树
printf("%c ",b->data);  //访问根节点
InOrder(b->rchild);     //递归访问右子树
}
}

void PostOrder(BTNode *b)       //后序遍历的递归算法
{
if (b!=NULL)
{
PostOrder(b->lchild);   //递归访问左子树
PostOrder(b->rchild);   //递归访问右子树
printf("%c ",b->data);  //访问根节点
}
}

int main()
{
BTNode *b;
CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
printf("二叉树b:");
DispBTNode(b);
printf("\n");
printf("先序遍历序列:\n");
PreOrder(b);
printf("\n");
printf("中序遍历序列:\n");
InOrder(b);
printf("\n");
printf("后序遍历序列:\n");
PostOrder(b);
printf("\n");
DestroyBTNode(b);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: