使用递归法创建一棵树,并在该树上实现前、中、后序遍历。
#结构体的定义
#include <iostream> #include <stdio.h> #include <stdlib.h> /*创建一颗二叉树用递归方法实现对其进行先、中、后序遍历的操作*/ //创建二叉树结构体 typedef struct Node { char data; struct Node *LChild; struct Node *RChild; }BiTNode,*BiTree; //结构体初始化 void init(BiTree *b) { *b=(BiTree)malloc(sizeof(BiTNode)); (*b)->LChild=NULL; (*b)->RChild=NULL; }
#主函数
int main() { BiTree b; init(&b); int i; while(1) { printf("输入1:创建二叉树\n"); printf("输入2:先序遍历二叉树\n"); printf("输入3:中序遍历二叉树\n"); printf("输入4:后序遍历二叉树\n"); printf("输入0:退出\n"); printf("请输入要执行的操作:\n"); scanf("%d",&i); switch(i) { case 1: CreateBiTree(&b); break; case 2: PreOrder(b); printf("\n"); break; case 3: inOrder(b); printf("\n"); break; case 4: PostOrder(b); printf("\n"); break; case 0: break; } if(i==0) break; } }
#1.递归法创建二叉树
//建立二叉树 void CreateBiTree(BiTree *b) { char ch; printf("请输入数据:\n"); getchar(); ch=getchar(); if(ch=='#') *b=NULL; else { *b=(BiTree)malloc(sizeof(BiTNode)); (*b)->data=ch; CreateBiTree(&((*b)->LChild)); CreateBiTree(&((*b)->RChild)); } }
#2.遍历二叉树
##2.1先序遍历二叉树
//先序遍历二叉树 void PreOrder(BiTree b) { if(b!=NULL) { printf("%c",b->data); PreOrder(b->LChild); PreOrder(b->RChild); } }
##2.2中序遍历二叉树
//中序遍历二叉树 void inOrder(BiTree b) { if(b!=NULL) { inOrder(b->LChild); printf("%c",b->data); inOrder(b->RChild); } }
##2.3后序遍历二叉树
//后序遍历二叉树 void PostOrder(BiTree b) { if(b!=NULL) { PostOrder(b->LChild); PostOrder(b->RChild); printf("%c",b->data); } }
#3.运行结果截图
先序遍历
中序遍历
后序遍历