注册 登录
编程论坛 C++ Builder

大家帮忙看一下这个程序应该怎么修改 VC环境下运行的 一直有报错 麻烦大神帮忙解答!感谢

敏儿Avril 发布于 2015-03-28 11:45, 4890 次点击
// tree.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

using namespace std;

//自引用结构
struct treeNode
{
int data; //节点值
int balance; //平衡因子
int order; //生成顺序
struct treeNode *left; //指向左子树的指针
struct treeNode *right; //指向右子树的指针
struct treeNode *father;
}; /*结构定义END */

typedef struct treeNode TreeNode;
typedef TreeNode * TreeNodePtr;

/*函数原型*/
void insertNode(TreeNodePtr &rootPtr,int value,int order); //插入节点
void inOrder(TreeNodePtr rootPtr); //中序遍历
int instructions(); //菜单
void search(TreeNodePtr &rootPtr,int value,int n); //查找

//----------------------------------------------------------------------------------
/*主函数*/
void main()
{
int item; //要操作的数据
int choices; //存储随机制的变量
int i; //循环计数器
int n; //节点个数
TreeNodePtr rootPtr=NULL; //树在开始的时候为空

while(choices=instructions())
{
switch(choices)
{
case 1:
rootPtr=NULL;
printf("输入要生成二叉树的节点数>>");
scanf("%d",&n);
if(n<=0)
{
printf("输入节点数必须大于等于1\n");
break;
}
srand(time(NULL));
for(i=1;i<=n;i++)
{
item=rand()%(10*n);
insertNode(rootPtr,item,i);
}/*END for*/
break;


case 2:
printf("中序遍历:\n");
if(rootPtr==NULL)
break;
inOrder(rootPtr);
printf("\n");
break;
case 3:
printf("输入要找的数>>");
scanf("%d",&item);
search(rootPtr,item,i);
i++;
break;

default:
printf("请输入正确的选项!\n");
}/*END switch*/
}

printf("\n");

}/*END main函数*/
//----------------------------------------------------------------------------------
int instructions()
{
int choice;
printf("\n菜单: 1.生成 2.遍历 3.查找 0.退出\n>>");
scanf("%d",&choice);
return(choice);
}/*END instructions*/
//----------------------------------------------------------------------------------
/*将节点插入到树中*/
void insertNode(TreeNodePtr &rootPtr,int value,int order)
{

//生成新节点,找到一个要连的地方
TreeNodePtr currentPtr=rootPtr;
TreeNodePtr newPtr;
TreeNodePtr prePtr=rootPtr;
if(newPtr=(TreeNodePtr)malloc(sizeof(TreeNode)))
{
newPtr->data=value;
newPtr->balance=0;
newPtr->order=order;
newPtr->left=NULL;
newPtr->right=NULL;
newPtr->father=NULL;
}/*END if*/

else
{
printf("没有分配空间成功!\n");
exit(0);
}
}
1 回复
#2
yangfrancis2015-04-10 08:33
太考眼力了。不缩进的代码实在很难出来前后逻辑。感觉是不是循环体内没有重复输入choice的值,循环条件没有发生动态变化?
1