二叉树创立及遍历
编写程序实现二叉树的创建,先序、中序、后序的递归遍历算法。在此基础上设计一个主程序完成如下功能:
(1)依次读入字符“ABD∅∅E∅∅C∅FG∅∅H∅∅”,按照先序建立二叉树T(∅表示空格);
(2)先序递归遍历二叉树T,输出遍历序列;
(3)中序递归遍历二叉树T,输出遍历序列;
(4)后序递归遍历二叉树T,输出遍历序列。
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MAXSIZE 70 typedef struct BiTreeNode { char data; struct BiTreeNode *left; struct BiTreeNode *right; }BiTreeNode, *BiTree; void CreateBiTree(BiTree *T) { char val; scanf_s("%c", &val); if (val == '0') *T = NULL; //null表示为空枝 else { *T = (BiTree)malloc(sizeof(BiTreeNode)); (*T)->data = val; 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() { BiTree T; T = (BiTree)malloc(sizeof(BiTreeNode)); printf("输入结点的值:\n"); CreateBiTree(&T); printf("先序遍历:\n"); PreOrderTravel(T); printf("\n"); printf("中序遍历:\n"); InOrderTravel(T); printf("\n"); printf("后序遍历:\n"); TailOrderTravel(T); printf("\n"); return 0; }
运行截图: