数据结构之树结点的释放问题
为什么当我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 *>,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 *>) // 为什么当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;}