/* -----先/中/后序遍历----- */
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* l, * r;
}Node;
Node* init(int data) {
Node* node = (Node*)malloc(sizeof(Node));
node->l = NULL;
node->r = NULL;
node->data = data;
return node;
}
void preorder(Node* node) { //先序 根 - l - r
printf("%d ", node->data);
if (node->l != NULL) {
preorder(node->l);
}
if (node->r != NULL) {
preorder(node->r);
}
}
void inorder(Node* node) { //中序 l - 根 - r
if (node->l != NULL) {
inorder(node->l);
}
printf("%d ", node->data);
if (node->r != NULL) {
inorder(node->r);
}
}
void postorder(Node* node) { //后序
if (node->l != NULL) {
postorder(node->l);
}
if (node->r != NULL) {
postorder(node->r);
}
printf("%d ", node->data);
}
Node* build_demo() {
Node* node = init(1);
node->l = init(3);
node->r = init(4);
node->l->l = init(7);
node->l->r = init(8);
node->r->r = init(9);
return node;
}
void clear(Node* node) {
if (node->l != NULL) {
clear(node->l);
}
if (node->r != NULL) {
clear(node->r);
}
free(node);
}
int main() {
Node* root = build_demo();
printf("先序遍历:");
preorder(root);
printf("\n----------\n");
printf("中序遍历:");
inorder(root);
printf("\n----------\n");
printf("后序遍历:");
postorder(root);
printf("\n----------\n");
clear(root);
system("pause");
return 0;
}