您的位置:首页 > 其它

二叉树遍历的递归算法

2016-07-06 12:35 225 查看
【二叉树遍历的递归算法】 

实现二叉树的先序、中序、后序遍历的递归算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。 

1.头文件:btree.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;

#ifndef BTREE_H_INCLUDED
#define BTREE_H_INCLUDED

#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); //销毁二叉树

#endif // BTREE_H_INCLUDED

2.主要算法
#include <stdio.h>
#include "btree.h"
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: