数据结构(c语言版)———二叉树的先、中、后序递归遍历!!

c语言版二叉树的遍历

一:算法思想:

  • 1.定义结构体typedef struct BiTreeNode,既二叉树节点的date域和左右孩子的信息。
  • 2.创建二叉树 调用CreateBiTree函数。
  • 3.先序遍历二叉树调用PreOrderTravel函数。
  • 4.中序遍历二叉树调用InOrderTravel函数。
  • 5.后序遍历二叉树调用TailOrderTravel函数。

二:程序代码

#include <stdio.h>
#include <stdlib.h>

 
#define MAXSIZE 100
#define FALSE 0

typedef struct BiTreeNode
{
    char data;
    struct BiTreeNode *Left;
    struct BiTreeNode *Right;
}BiTreeNode,*BiTree;
 

void menu(  )                     //打印菜单,供用户选择要执行的功能。

{
    printf("\n");
	printf("**************************\n");
	printf("*******1.按先序遍历*******\n");
	printf("*******2.按中序遍历*******\n");
	printf("*******3.按后序遍历*******\n");
	printf("*******0. 推出程序 *******\n");
	printf("**************************\n");
	 printf("\n");
}
void CreateBiTree(BiTree *T)             //创建二叉树
{
    char tree;                                   //定义的tree变量用来接收创建二叉树时输入的字符
    scanf("%c",&tree);
    if(tree == ' ')
        *T = NULL;  
    else
    {
        *T = (BiTree)malloc(sizeof(BiTreeNode));
        (*T)->data = tree;
        CreateBiTree(&(*T)->Left);
        CreateBiTree(&(*T)->Right);
    }
}
 
 

void PreOrderTravel(BiTree T)                //先序遍历二叉树
{
    if(T==NULL)
       return; 
    printf("%c ",T->data);
    PreOrderTravel(T->Left);
    PreOrderTravel(T->Right);
}
 

void InOrderTravel(BiTree T)                //中序遍历二叉树
{
    if(T==NULL)
        return;
    InOrderTravel(T->Left);
    printf("%c ",T->data);
    InOrderTravel(T->Right);
}
 

void TailOrderTravel(BiTree T)          //后序遍历二叉树 
{
    if(T==NULL)
        return;
    TailOrderTravel(T->Left);
    TailOrderTravel(T->Right);
    printf("%c ",T->data);
}



int main()
{
	int input;
    BiTree T;
	printf("创建二叉树:");
	CreateBiTree(&T);
	do
	{	
		menu( );
		printf("please enter your choice:");
		scanf("%d",&input);
           switch(input) 
        {   
		   
		   case 1 : printf("先序方式遍历结果:");
			   PreOrderTravel(T);
               printf("\n");
                break;
           case 2 :printf("中序方式遍历结果:");
               InOrderTravel(T);
               printf("\n");
               break;
           case 3 :printf("后序方式遍历结果:");
               TailOrderTravel(T);
               printf("\n");
	           break;
	       case 0:
		       printf("退出程序\n");
			   break;
		   default:
			   printf("输入错误!请重新输入.\n");
            }//end of switch
	  }while(input);
    return 0;
}

三:运行结果

这里是引用
输入的内容为ABC- - -DE- -F-G- -,其中每一个"-" 代表一个空格.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值