浅谈二叉树的存储表示与实现

#include<stdio.h>//输入输出流
#include<stdlib.h>//标准库
 typedef struct node  
 {
   int data;
   struct node *lchild;
   struct node *rchild;
 }*bitree,bitnode;
//构造一个新的二叉树
bitree initbitree(bitnode *root)
{ 
  bitree tree=root;
   return tree;
}
//生成节点包含数据域和左右孩子
bitnode *makenode(int item, bitnode *lchild,bitnode *rchild)
{
bitnode *pnode=(bitnode*)malloc(sizeof(bitnode));
if(pnode)
{
  pnode->data=item;
  pnode->lchild=lchild;
  pnode->rchild=rchild;
}
return pnode;
}
//释放节点
void freenode(bitnode *pnode)
{
  if(pnode!=NULL)
   free(pnode);
 }
//销毁二叉树
void destorybitnode(bitree tree)
{

bitnode *pnode=tree;
if(pnode->lchild!=NULL)
   {
    destorybitnode(pnode->lchild);
	}
if(pnode->rchild!=NULL)
    {
	destorybitnode(pnode->rchild);//递归调用
	}
 freenode(pnode);
}
//判断是否为空
int isempty(bitree tree)
{
      if(tree==NULL)
        return 0;
          else 
	        return 1;
}
//返回树的深度
 int GetDepth(bitree tree)
 {
   int cd,ld,rd;
   cd=ld=rd=0;
   if(tree)
    {
	   ld=GetDepth(tree->lchild);
	   rd=GetDepth(tree->rchild);
	   cd=(ld>rd?ld:rd);
	   return cd+1; 
	 }
      else
	  { 
	   return 0;
       }
 }
 //返回根
 bitree get(bitree tree)
 {
 return tree;
  }
//返回节点值
int getint(bitnode *pnode)
{
    return pnode->data;
}
//设置节点值
void setint(bitnode *pnode, int item)
{
pnode->data=item;
}
//设置左子树
bitree setlchild(bitree parent,bitree lchild)
{
parent->lchild=lchild;
return lchild;
}
//设置右子树
bitree setrchild(bitree parent,bitree rchild)
{
parent->rchild=rchild;
return rchild;
}
//返回左子树
bitree getlchild(bitree tree)
{
 if(tree!=NULL)
   return tree->lchild;
    else
	return NULL;
   
   }

//返回右子树
bitree getrchild(bitree tree)
{
 if(tree!=NULL)
   return tree->rchild;
    else
	return NULL;
   
   }
//插入新的子树,lr为0插入左子树,为1插入右子树
bitree insertchild(bitree parent,int lr,bitree child)
{
  if(parent)
  {
     if(lr==0&&parent->lchild==NULL)
	{
	 parent->lchild=child;
       return child;
	}
	if(lr==1&&parent->rchild==NULL)
	{
	 parent->rchild=child;
       return child;
	}
  }
}
//删除子树lr为0删除左子树,为1删除右子树
void deletechild(bitree parent,int lr)
{
    if(parent)
	{
        if(lr=0 && parent->lchild!=NULL)
		{
	     parent->lchild=NULL;
         freenode(parent->lchild);//释放空间
		}
	  if(lr=1 && parent->rchild!=NULL)
	  {
	   parent->rchild=NULL;
       free(parent->rchild);
	  }
	}
}
int main()
{
bitnode *n1=makenode(10,NULL,NULL);
bitnode *n2=makenode(20,NULL,NULL);
bitnode *n3=makenode(30,n1,n2);
bitnode *n4=makenode(40,NULL,NULL);
bitnode *n5=makenode(50,NULL,NULL);
bitnode *n6=makenode(60,n4,n5);
bitnode *n7=makenode(70,NULL,NULL);
bitree tree=initbitree(n7);//n7为根节点
setlchild(tree,n3);//n3为n7的左子树
setlchild(tree,n6);//n6为n7的右子树
printf("第一次返回树的深度:%d\n",GetDepth(tree));
deletechild(tree,0);
printf("第二次返回树的深度:%d\n",GetDepth(tree));
return 0;
}


你可能感兴趣的:(浅谈二叉树的存储表示与实现)