| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 809 人关注过本帖
标题:用Assign函数 来实现对结点内容的修改
只看楼主 加入收藏
pjzpjz19880
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-6
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:2 
用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);

}
 
 
搜索更多相关主题的帖子: 函数 Assign 结点 
2010-06-09 20:16
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
void Search( BTreeNode *T, elemType e, BTreeNode *&temp )
{
    if( T )
    {
        if( T->data == e )
        {
            temp = T;
            return;
        }
        Search( T->left, e, temp );
        Search( T->right, e, temp );
    }
}

int Assign( BTreeNode *T, elemType e, elemType value )   //     程序句出错在这里,e指的是某个结点,我怎么能使e指向我要的的特定的结点,比如
//初始条件:二叉树T存在,e 是T 中某个结点                           B点,然后把value值赋在B上。我不知道是不是还要另外再写个函数来指定特定点。
//操作结果:结点e赋值为value                                                 ??????
{  
    if(!T)
        return 0;
    BTreeNode *temp = NULL;
    Search( T, e, temp );
    temp->data = value ;  
    return 1;  
}
2010-06-11 12:10
asdjc
Rank: 6Rank: 6
来 自:武汉
等 级:侠之大者
威 望:7
帖 子:98
专家分:487
注 册:2010-1-22
收藏
得分:0 
看了一下,
int Assign( BTreeNode *T, elemType e, elemType value )中的elemType value有问题,
这一项因该是代表节点值,应为char型。
2010-07-15 18:24
快速回复:用Assign函数 来实现对结点内容的修改
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020198 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved