二叉树遍历递归算法

来源:互联网 发布:谁人知 刘德华 编辑:程序博客网 时间:2024/05/17 00:49

 输入代码:

#include<stdio.h>#include <malloc.h>#define MaxSize 100typedef char ElemType;using namespace std;typedef struct node{    ElemType data;   //数据元素    struct node *lchild;  //指向左孩子节点    struct node *rchild;  //指向右孩子节点} BTNode;/*建立二叉树*/void CreateBTNode(BTNode *&b,char *str){    BTNode *St[MaxSize],*p;    int top=-1,k,j=0;    char ch;    b=NULL;    //二叉树初始时为空    ch=str[j];    while(ch!='\0')    //循环扫描str中的每个字符    {        switch(ch)        {        case '(':   //开始处理左孩子节点            top++;            St[top]=p;            k=1;            break;        case ')':            top--;            break;        case ',':   //开始处理右孩子节点            k=2;            break;        default:            p=(BTNode *)malloc(sizeof(BTNode));            p->data=ch;            p->lchild=p->rchild=NULL;            if(b==NULL)     //若尚未建立根节点                b=p;       //*p为二叉树的根节点            else            //已建立二叉树根节点            {                switch(k)                {                case 1:                    St[top]->lchild=p;                    break;                case 2:                    St[top]->rchild=p;                    break;                }            }        }        j++;        ch=str[j];    }}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(,G)),C(E,F))");    printf("先序遍历:");    PreOrder(b);    printf("\n");    printf("中序遍历:");    InOrder(b);    printf("\n");    printf("后序遍历:");    PostOrder(b);    printf("\n");    return 0;}


运行截图:


0 0
原创粉丝点击