/*
作者:丫丫
功能:测试传递指针和传递地址不一样(以二叉树的建立分析)
结论:传递指针指针所指的不容不会被改变,而传递地址则该地址的内容会被改变
日期:2014年12月3日
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define STACK_SIZE 50
//定义二叉节点
typedef struct Node
{
char data;
struct Node * LChild;
struct Node * RChild;
}BiTNode, *BiTree;
//创建一棵二叉树(传递地址)不需要返回值
void CreatBiTree(BiTree * T)
{
char ch;
ch = getchar();
if (ch == ' ')
(*T) = NULL;
else
{
(*T) = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = ch;
CreatBiTree(&((*T)->LChild));
CreatBiTree(&((*T)->RChild));
}
}
//创建一棵二叉树(传递指针)需要返回值
/*
BiTree CreatBiTree(BiTree T) //T为指针类型,传递的是指针
{
char ch;
ch = getchar();
if (ch == ' ')
T = NULL;
else
{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = ch;
T->LChild = CreatBiTree(T->LChild);
T->RChild = CreatBiTree(T->RChild);
}
return T; //返回创建的二叉树
}
*/
//先序遍历二叉树的递归算法
void PreOder(BiTree T)
{
if (T != NULL)
{
printf("%c", T->data);
PreOder(T->LChild);
PreOder(T->RChild);
}
}
//中序遍历二叉树的递归算法
void InOder(BiTree T)
{
if (T != NULL)
{
InOder(T->LChild);
printf("%c", T->data);
InOder(T->RChild);
}
}
//后序遍历二叉树的递归算法
void PostOder(BiTree T)
{
if (T != NULL)
{
PostOder(T->LChild);
PostOder(T->RChild);
printf("%c", T->data);
}
}
int main()
{
BiTree T;
printf("请按照先序遍历输入二叉树\n");
CreatBiTree(&T);
printf("先序遍历二叉树的递归算法:\n");
PreOder(T);
printf("\n中序遍历二叉树的递归算法:\n");
InOder(T);
printf("\n后序遍历二叉树的递归算法:\n");
PostOder(T);
printf("\n");
system("pause");
return 0;
}