用Assign函数 来实现对结点内容的修改
这是一个程序,希望大家能帮帮我啊,在这个程序中除了下面的那段Assign的函数运行是对的,但是加了那个函数后就错了,后面的主函数内容也就没写了,我实在是写不出了。
#include <stdio.h>
#include <stdlib.h>
#define STACK_MAX_SIZE 30
#define QUEUE_MAX_SIZE 30
#ifndef elemType
typedef char elemType;
#endif
typedef char DataType;
typedef struct BTreeNode
{
elemType data;
struct BTreeNode *left;
struct BTreeNode *right;
}BTree;
/* 初始化二叉树 */
void initBTree(struct BTreeNode* *bt)
{
*bt = NULL;
return;
}
/* 建立二叉树(根据a所指向的二叉树广义表字符串建立) */
void createBTree(struct BTreeNode* *bt, char *a)
{
struct BTreeNode *p;
struct BTreeNode *s[STACK_MAX_SIZE];/*定义s数组为存储根结点指针的栈使用 */
int top = -1; /*定义top作为s栈的栈顶指针,初值为-1,表示空栈 */
int k; /* 用k作为处理结点的左子树和右子树,k =1处理左子树,k = 2处理右子树 */
int i = 0; /*用i扫描数组a中存储的二叉树广义表字符串,初值为0 */
*bt = NULL; /*把树根指针置为空,即从空树开始建立二叉树 */
/*每循环一次处理一个字符,直到扫描到字符串结束符\0为止 */
while(a[i] != '\0'){
switch(a[i]){
case ' ':
break; /* 对空格不作任何处理 */
case '(':
if(top ==STACK_MAX_SIZE - 1){
printf("The stack space is too small!\n");
exit(1);
}
top++;
s[top] =p;
k =1;
break;
case ')':
if(top ==-1){
printf("The generalized string table of binary tree iswrong!\n");
exit(1);
}
top--;
break;
case ',':
k =2;
break;
default:
p=(struct BTreeNode*)malloc(sizeof(struct BTreeNode));
p->data = a[i];
p->left = p->right = NULL;
if(*bt ==NULL){
*bt = p;
}else{
if( k == 1){
s[top]->left = p;
}else{
s[top]->right = p;
}
}
}
i++; /*为扫描下一个字符修改i值 */
}
return;
}
/* 检查二叉树是否为空,为空则返回1,否则返回0 */
int emptyBTree(struct BTreeNode *bt)
{
if(bt == NULL){
return 1;
}else{
return 0;
}
}
/*中序遍历 */
void inOrder(struct BTreeNode *bt)
{
if(bt != NULL){
inOrder(bt->left); /* 中序遍历左子树 */
printf("%c ", bt->data); /* 访问根结点 */
inOrder(bt->right); /* 中序遍历右子树 */
}
return;
}
/* 按层遍历 */
void levelOrder(struct BTreeNode *bt)
{
struct BTreeNode *p;
struct BTreeNode *q[QUEUE_MAX_SIZE];
int front = 0, rear = 0;
/* 将树根指针进队 */
if(bt != NULL){
rear = (rear + 1) % QUEUE_MAX_SIZE;
q[rear] = bt;
}
while(front != rear){ /*队列非空 */
front = (front + 1) % QUEUE_MAX_SIZE; /* 使队首指针指向队首元素*/
p = q[front];
printf("%c ", p->data);
/* 若结点存在左孩子,则左孩子结点指针进队*/
if(p->left != NULL){
rear = (rear + 1) % QUEUE_MAX_SIZE;
q[rear] = p->left;
}
/* 若结点存在右孩子,则右孩子结点指针进队*/
if(p->right != NULL){
rear = (rear + 1) % QUEUE_MAX_SIZE;
q[rear] = p->right;
}
}
return;
}
void DispTree(struct BTreeNode *bt, int level)
{
int i;
if(bt==NULL)
return;
DispTree(bt->left,level+1);/*形式化显示二叉树的左子树*/
/*缩进level*2个字符*/
for(i=0;i<level;i++)printf(" "); /*递归*/
/*假设你的二叉树的结点存放的是一个字符*/
printf("%c\n",bt->data);
DispTree(bt->right,level+1);/*形式化显示二叉树的左子树*/
}
Status Assign(BTreeNode ,BTreeNode* &e,elemType value ) ? 程序句出错在这里,e指的是某个结点,我怎么能使e指向我要的的特定的结点,比如
//初始条件:二叉树T存在,e 是T 中某个结点 B点,然后把value值赋在B上。我不知道是不是还要另外再写个函数来指定特定点。
//操作结果:结点e赋值为value ??????
{
if(!T) return NULL;
e->data=value ;
return TRUE;
}
/*****************************主函数***************************************/
int main(int argc, char *argv[])
{
struct BTreeNode *bt; /*指向二叉树根结点的指针 */
char*b; /*用于存入二叉树广义表的字符串 */
elemType x, *px;
initBTree(&bt); /*初始化树*/
printf("Please input generalized string tableof this binary tree:\n");
/* scanf("%s", b); */
b="A(B(D( ,F),E(G,)),C)"; /*以广义表的形式输入二叉树 */
createBTree(&bt, b);
if(bt != NULL)
printf("Output the binary tree in generalizedform:\n\n");
printBTree(bt); /* 以广义表的形式输出二叉树 */
printf("\n\n");
printf("indorder:"); /*中序遍历 */
inOrder(bt);
printf("\n\n");
printf("levelorder:"); /*按层遍历 */
levelOrder(bt);
printf("\n\n");
/*以形式化表示法将链式存储的二叉树显示出来*/
printf("Show the binary tree in formalrepresentation:\n\n");
DispTree(bt,0);
}