#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct NODE//定义一个节点的结构体
{
int data;//存储数据
struct NODE *left;//左子树
struct NODE *right;//右子树
};
typedef struct NODE Node;//给结构体取个别名 (以后引用可省掉struct)
void addTree(int data);
void add(Node node,int data);
void preOrder(Node *node);
void infixOrder(Node *node);
void postOrder(Node *node);
Node *root=NULL;//定义一个全局的的根节点
//添加函数(主要用来递归)
void add(Node *node,int data)
{
if(data==node->data)
{
printf("空2");
return;
}
else if(data<node->data&&node->left==NULL)
{
Node *temp=(Node*)malloc(sizeof(Node));
temp->data=data;
temp->left=NULL;
temp->right=NULL;
node->left=temp;
return;
}
else if(data>node->data&&node->right==NULL)
{
Node *temp=(Node*)malloc(sizeof(Node));
temp->data=data;
temp->left=NULL;
temp->right=NULL;
node->right=temp;
return;
}
if(data<node->data)
{
add(node=node->left,data);
}
else if(data>node->data)
{
add(node=node->right,data);
}
}
//编写一向树添加的函数
void addTree(int data)
{
Node *temp=(Node*)malloc(sizeof(Node));
temp->data=data;
temp->left=NULL;
temp->right=NULL;
if(root==NULL){
root=temp;
}else
{
add(root,data);
}
}
//编写一个遍历的方法 (前序)
void preOrder(Node *node)
{
if(node==NULL)
{
return;
}
printf("%d\t",node->data);
preOrder(node->left);
preOrder(node->right);
}
//编写一个遍历的方法 (中序)
void infixOrder(Node *node)
{
if(node==NULL)
{
return;
}
preOrder(node->left);
printf("%d\t",node->data);
preOrder(node->right);
}
//编写一个遍历的方法 (后序)
void postOrder(Node *node)
{
if(node==NULL)
{
return;
}
preOrder(node->left);
preOrder(node->right);
printf("%d\t",node->data);
}
int main()
{
addTree(10);
addTree(7);
addTree(14);
addTree(6);
addTree(8);
addTree(11);
addTree(15);
printf("\n前序遍历:\n");
preOrder(root);
printf("\n中序序遍历:\n");
infixOrder(root);
printf("\n后序遍历:\n");
postOrder(root);
return 0;
}