递归的方法用先序建立二叉树,同时用先序、中序、后序的方式分别把二叉树的结果读出。
tree2.h
#pragma once
typedef char TElemType;
typedef struct BiTNode {
TElemType data;
struct BiTNode* lchild, * rchild;//左右孩子指针
}BiTNode, * BiTree;
typedef bool Status;
#define OK true;
#define ERROR false;
// 先序输入创建二叉树
Status CreateBiTree(BiTree& T);
//先序遍历读取
void PreOrderTraverse(BiTree T);
//中序遍历读取
void InOrderTraverse(BiTree T);
//后序遍历读取
void PostOrderTraverse(BiTree T);
tree2.cpp
#define _CRT_SECURE_NO_DEPRECATE
#include "tree2.h"
#include <stdio.h>
#include <malloc.h>
#include <iostream>
using namespace std;
// 先序输入创建二叉树
Status CreateBiTree(BiTree& T) {
char ch;
scanf("%c", &ch);
// 空格表示空(子)树
if (ch == ' ') T = NULL;
else {
// 创建节点
if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR;
T->data = ch;
// 先序
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
//先序遍历读取
void PreOrderTraverse(BiTree T) {
if (T == NULL) return;
cout << T->data << ' ';
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
//中序遍历读取
void InOrderTraverse(BiTree T) {
if (T == NULL) return;
InOrderTraverse(T->lchild);
cout << T->data << ' ';
InOrderTraverse(T->rchild);
}
//后序遍历读取
void PostOrderTraverse(BiTree T) {
if (T == NULL) return;
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout << T->data << ' ';
}
main.cpp
#include <stdio.h>
#include "tree2.h"
#include "tree.h"
int main() {
BiTree T;
printf("前序遍历输入\n");
CreateBiTree(T);
printf("\n前序遍历输出\n");
PreOrderTraverse(T);
printf("\n中序遍历输出\n");
InOrderTraverse(T);
printf("\n后序遍历输出\n");
PostOrderTraverse(T);
return 0;
}
测试结果: