c语言删二叉树子树怎么释放内存空间

五月de麦子 发布于 2013/05/15 18:05
阅读 826
收藏 0

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAX_SIZE 100
bool flag=true;
typedef struct RootOfTree
{
 int data;
 RootOfTree *Lchild,*Rchild;
}*Tree;
/*创建树*/
void createTree(Tree &t)
{
 int k;
 scanf("%d",&k);
 t = (Tree)malloc(sizeof(Tree));
 if(t!=NULL&&k!=0)
 {
  t->data = k ;
  printf("创建左子树\n");
  createTree(t->Lchild);
  printf("创建右子树\n");
  createTree(t->Rchild);
 }
 else if(t!=NULL&&k==0)
 {
  t = NULL;
  printf("没有创建子树\n");
 }
}
/*前序输出*/
void preorder(Tree t)
{
 if(t!=NULL)
 {
  if(0!=t->data)
   printf("%3d",t->data );
  preorder(t->Lchild);
  preorder(t->Rchild );
 }
}
/*释放节点*/
void deleteNode(Tree q)
{
 if(q!=NULL)
 {
  deleteNode(q->Lchild);
  deleteNode(q->Rchild);
  delete q;
 }
}
/*删除子树*/
void deleteSubtree(Tree &t,int k)
{
 //先确定要删的子树的根
// q = (Tree)malloc(sizeof(Tree));
 
// q->data = k;
 Tree q;
 if(t!=NULL&&flag)
 {
  if(t->data==k)
  {
   flag = false;
   q = t ;
   t = NULL;
   deleteNode(q);
   exit(0);
  }
  else
  {
   deleteSubtree(t->Lchild,k);
   deleteSubtree(t->Rchild,k);
  }
 }
 //printf("未找此子树!\n");
}
void main()
{
 printf("创建树:\n");
 Tree t;
 createTree(t);
 printf("输入要删除树根节点:\n");
 int k;
 scanf("%d",&k);
 deleteSubtree(t,k);
 //preorder(t);
 printf("\n");
}

请问一下这段代码哪错了?

加载中
返回顶部
顶部