第十周项目2-二叉树遍历的递归算法

来源:互联网 发布:ipad网络非常慢怎么办 编辑:程序博客网 时间:2024/06/06 08:37
copyright (c) 2016,烟台大学计算机学院  All rights reserved.  文件名称:1.cpp  作者:臧新晓 完成日期:2016年9月12日  版本号:v1.0  问题描述:实现二叉树的先序、中序、后序遍历的递归算法,并对用“A(B(D,E(J,K(L,M(N)))))”创建的二叉树进行测试。输入描述:无。输出描述:测试结果。代码//main.cpp:[csharp] view plain copy 在CODE上查看代码片派生到我的代码片#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:\n");        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;    }   //btree.h:[csharp] view plain copy 在CODE上查看代码片派生到我的代码片#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   //btree.cpp:[csharp] view plain copy 在CODE上查看代码片派生到我的代码片#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:\n");        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;    }   

运行结果:


0 0
原创粉丝点击