首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

数据结构之树结点的释放有关问题

2012-05-24 
数据结构之树结点的释放问题C/C++ code为什么当我k大于3时ClearQueue函数就会出问题,等于3时都不会,请高手

数据结构之树结点的释放问题

C/C++ code
为什么当我k大于3时ClearQueue函数就会出问题,等于3时都不会,请高手指教?????????#include <iostream.h>#include <stdlib.h>#define MAXSIZE  10typedef char DataType;const int k = 5; //3叉树 struct GTreeNode{    DataType data;    GTreeNode *t[3];};void InitGTree(GTreeNode *GT){    GT = NULL;}//创建树void CreateGTree(GTreeNode *&GT,char *a){    const int MaxSize = 10;    GTreeNode *s[MaxSize]; // 栈的长度要大于等于二叉树的深度    int d[MaxSize];    int top = -1;    GT = NULL;    GTreeNode *p;    int i = 0;    while (a[i])    {        switch(a[i])        {        case ' ':            break;        case '(':            if (top == MaxSize - 1)            {                cout<<"栈空间太小,请增加MaxSize的大小"<<endl;                exit(1);            }            top++;            s[top] = p;            d[top] = 0;            break;        case ')':            if (top == -1)            {                cout<<"二叉树广义表字符串错!"<<endl;                exit(1);            }            top--;            break;        case ',':            d[top]++;            break;        default:            p = new GTreeNode;            p->data = a[i];            for (int i = 0; i < k; i++)            {                p->t[i] = NULL;            }            if (GT == NULL)            {                GT = p;            }            else            {                s[top]->t[d[top]] = p;            }        }        i++;    }}//先根void PreRoot(GTreeNode *GT){    if (GT != NULL)    {        cout<<GT->data<<" ";        for (int i = 0; i < k; i++)        {            PreRoot(GT->t[i]);        }    }}void ClearGTree(GTreeNode *&GT) // 为什么当k大于3时就会有问题???????????{    if (GT != NULL)    {        for (int i = 0; i < k; i++)        {            ClearGTree(GT->t[i]);        }        delete GT;        GT = NULL;    }}#include "btree.h"//还有问题,为什么当我k大于3叉树时ClearGTree()就会出错?int main(){    //char *a = "a(b(c,d),e(f,g),h(i,j,l(m,n)))";    //char *a = "a(b(c,d),e(f,g),h(i,j))";    char *a = "a";    DataType x = 'g';    GTreeNode *GT;    InitGTree(GT);    CreateGTree(GT,a);        cout<<"先根遍历:"<<endl;    PreRoot(GT);    cout<<endl;        ClearGTree(GT);        return 0;}



[解决办法]
GTreeNode *t[3];
这里的3换成k,别上面改了下面没改

热点排行