二叉树遍历的递归算法
Posted Henry Zheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树遍历的递归算法相关的知识,希望对你有一定的参考价值。
【二叉树遍历的递归算法】
实现二叉树的先序、中序、后序遍历的递归算法,并对用”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
#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;
以上是关于二叉树遍历的递归算法的主要内容,如果未能解决你的问题,请参考以下文章