二叉树遍历的递归算法

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


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;




以上是关于二叉树遍历的递归算法的主要内容,如果未能解决你的问题,请参考以下文章

递归遍历二叉树

二叉树几种遍历算法的非递归实现

二叉树的递归遍历

二叉树的递归与迭代遍历

c++如何用非递归的算法去创建二叉树,有没有分层建立二叉树的方法

二叉树前中序非递归遍历