#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//二叉链表
typedef struct BiNode{
int data;
struct BiNode *lchild, *rchild;
}BiNode, *BiTree;
#if 0
/*
1、
对树的访问本质,将打印去掉,访问的逻辑是一样的,只不过是打印的时机不同,
即访问的路径是一样的,访问的时机不一样。
邮递员经过你的家门,第一次经过没投,回来路过的时候再投递
2、
*/
//前序遍历 根左右 Preorder traversal
void preOrder(BiNode *root)
{
if (root == NULL){
return;
}
printf("%d ", root->data);//先打印根
//遍历左子树
preOrder(root->lchild);
//遍历右子树
preOrder(root->rchild);
}
//中序遍历 左根右 Middle order traversal
void inOrder(BiNode *root)
{
if (root == NULL){
return;
}
//遍历左子树
inOrder(root->lchild);
printf("%d ", root->data);//打印根
//遍历右子树
inOrder(root->rchild);
}
//后序遍历 左右根 Postorder traversal
void postOrder(BiNode *root)
{
if (root == NULL){
return;
}
//遍历左子树
postOrder(root->lchild);
//遍历右子树
postOrder(root->rchild);
printf("%d ", root->data);//打印根
}
/*
t1
t2 t3
t4 t5
*/
//二叉链表 表示法
void test()
{
BiNode t1, t2, t3, t4, t5;
memset(&t1, 0, sizeof(BiNode));
memset(&t2, 0, sizeof(BiNode));
memset(&t3, 0, sizeof(BiNode));
memset(&t4, 0, sizeof(BiNode));
memset(&t5, 0, sizeof(BiNode));
t1.data = 1;
t2.data = 2;
t3.data = 3;
t4.data = 4;
t5.data = 5;
//建立树关系
t1.lchild = &t2; //t1的左孩子为t2
t1.rchild = &t3; //t1的右孩子为t3
t2.lchild = &t4; //t2的左孩子为t4
t3.lchild = &t5; //t3的左孩子为t5
printf("preOrder\n");
preOrder(&t1);
printf("\ninOrder\n");
inOrder(&t1);
printf("\npostOrder\n");
postOrder(&t1);
printf("\n");
}
#endif