谁能帮我看看这个代码怎么了
#include <stdio.h>
#include <stdlib.h>
typedef int Status;
#define OK 1
#define FALSE 0
/* 二叉链表的结点结构 */
typedef int BElemType;
typedef struct BiTNode
{
BElemType data; /* 结点数据 */
struct BiTNode *lchild, *rchild; /* 左右孩子指针 */
} BiTNode, *BiTree;
/* 即将在主函数中调用的函数 */
void CreateBiTree(BiTree *T);
void InOrderTraverse(BiTree T);
int main(void)
{
BiTree T;
/* 建立二叉排序树 */
CreateBiTree(&T);
/* 中序遍历查看建立的二叉排序树 */
InOrderTraverse(T);
return 0;
}
/* 二叉排序树的查找操作(递归)
* T为待查找的二叉排序树
* key为要查找的关键字
* f为指向双亲结点的指针,初始时为NULL
* 当查找成功时,p指向查找到的结点,当查找失败时,
* p指向最后一次访问到的结点
*/
Status SearchBST(BiTree T, BElemType key, BiTree f, BiTree *p)
{
if (T == NULL) {
*p = f;
return FALSE;
}
else if (key == T->data) {
*p = T;
return OK;
}
else if (key < T->data)
return SearchBST(T->lchild, key, T, p);
else
return SearchBST(T->rchild, key, T, p);
}
/* 二叉排序树的插入操作 */
Status InsertBST(BiTree *T, BElemType key)
{
BiTree p, s;
if (!SearchBST(*T, key, NULL, &p)) { /* 当二叉排序树中没有key时进行插入操作 */
s = (BiTree)malloc(sizeof(BiTNode));
s->data = key;
s->lchild = s->rchild = NULL;
if (!*T) /* 当为空树时 */
*T = s; /* 插入s为根结点 */
else if (key < p->data)
p->lchild = s;
else
p->rchild =s;
return OK;
}
else
return FALSE;
}
/* 二叉排序树的建立 */
#define MAXSIZE 100
void CreateBiTree(BiTree *T)
{
int i, num;
BElemType data[MAXSIZE];
*T = NULL; /* 初始化为空树 */
printf("输入结点个数: ");
scanf("%d", &num);
for (i = 0; i < num; i++)
scanf("%d", &data[i]);
for (i = 0; i < num; i++) /* 利用二叉排序树的插入操作建立二叉排序树 */
InsertBST(T, data[i]);
}
/* 二叉树的中序遍历 */
void InOrderTraverse(BiTree T)
{
if (T == NULL) {
printf("二叉树为空 !\n");
exit(1);
}
InOrderTraverse(T->lchild);
printf("%d", T->data);
InOrderTraverse(T->rchild);
}
// BTree.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
typedef int Status;
#define OK 1
#define FALSE 0
/* 二叉链表的结点结构 */
typedef int BElemType;
typedef struct BiTNode
{
BElemType data; /* 结点数据 */
struct BiTNode *lchild, *rchild; /* 左右孩子指针 */
} BiTNode, *BiTree;
/* 即将在主函数中调用的函数 */
void CreateBiTree(BiTree *T);
void InOrderTraverse(BiTree T);
/* 二叉排序树的查找操作(递归)
* T为待查找的二叉排序树
* key为要查找的关键字
* f为指向双亲结点的指针,初始时为NULL
* 当查找成功时,p指向查找到的结点,当查找失败时,
* p指向最后一次访问到的结点
*/
Status SearchBST(BiTree T, BElemType key, BiTree f, BiTree *p)
{
if (T == NULL) {
*p = f;
return FALSE;
}
else if (key == T->data) {
*p = T;
return OK;
}
else if (key < T->data)
return SearchBST(T->lchild, key, T, p);
else
return SearchBST(T->rchild, key, T, p);
}
/* 二叉排序树的插入操作 */
Status InsertBST(BiTree *T, BElemType key)
{
BiTree p, s;
if (!SearchBST(*T, key, NULL, &p)) { /* 当二叉排序树中没有key时进行插入操作 */
s = (BiTree)malloc(sizeof(BiTNode));
s->data = key;
s->lchild = s->rchild = NULL;
if (!*T) /* 当为空树时 */
*T = s; /* 插入s为根结点 */
else if (key < p->data)
p->lchild = s;
else
p->rchild =s;
return OK;
}
else
return FALSE;
}
/* 二叉排序树的建立 */
#define MAXSIZE 100
void CreateBiTree(BiTree *T)
{
int i, num;
BElemType data[MAXSIZE];
*T = NULL; /* 初始化为空树 */
printf("输入结点个数: ");
scanf("%d", &num);
for (i = 0; i < num; i++)
scanf("%d", &data[i]);
for (i = 0; i < num; i++) /* 利用二叉排序树的插入操作建立二叉排序树 */
InsertBST(T, data[i]);
}
/* 二叉树的中序遍历 */
void InOrderTraverse(BiTree T)
{
if (T == NULL) {
// printf("二叉树为空 !\n");
// exit(1);
return;//别直接退出程序,不方便调试啊!
}
InOrderTraverse(T->lchild);
printf("%d ", T->data);//%d后面加个空格或者换行社么的,免得打印出来的是一串数字
InOrderTraverse(T->rchild);
}
int _tmain(int argc, _TCHAR* argv[]){
BiTree T;
/* 建立二叉排序树 */
CreateBiTree(&T);
/* 中序遍历查看建立的二叉排序树 */
InOrderTraverse(T);
int i = 0;
system("pause");
return 0;
}