链式静态二叉树存储

#include<stdio.h>;

#include<malloc.h>;

STUCK pNode //树的节点
{
  int data;
  stuck pNode * pLeft;
  stuck pNode * pRight;   
}

void first ( struct BTNode * pT );
void IN( struct BTNode * pT );
void BOTTOM( struct BTNode * pT );
STUCK pNode *CreateTree( void );


int main (void) //执行主程序
{
    
  STUCK pNode * PT =  CreateTree(); //将已建好树的根节点地址返回赋值给 PT
    //先序
     first(PT);
    //中序
     IN(PT);
        //后序
     BOTTOM(PT);

}

STUCK pNode * Greattree()//建树程序
{
  STUCK pNode * pA = (STUCK pNode *)malloc(sizefo(STUCK pNode));
  STUCK pNode * pB = (STUCK pNode *)malloc(sizefo(STUCK pNode));
  STUCK pNode * pC = (STUCK pNode *)malloc(sizefo(STUCK pNode));
  STUCK pNode * pD = (STUCK pNode *)malloc(sizefo(STUCK pNode));
  STUCK pNode * pE = (STUCK pNode *)malloc(sizefo(STUCK pNode));
  STUCK pNode * pF = (STUCK pNode *)malloc(sizefo(STUCK pNode));

  pA -> data = 'A';
  pB -> data = 'B';
  pC -> data = 'C';
  pD -> data = 'D';
  pE -> data = 'E';
  pF -> data = 'F';
  
  pA -> pLeft = pB;
  pA -> pRight = pE;
  pB -> pLeft = pC;
  pB -> pRight = NULL;
  pC -> pLeft = NULL;
  pc -> pRight = pD;
  pD -> pLeft = NULL;
  pD -> pRight = NULL;
    pE -> pLeft = pF;
  pE -> pRight = NULL;
   return PA;
 

}


frist(stuck pNode * p)//先序遍历
{
   if (NULL != p) //判断 树是否为空
    {
      printf("%c", p -> data) // 输出根节点
      
      if(NULL != p -> pLeft) // 判断 根节点左子树是否为空


      { frist(p -> pLeft) }// 递归遍历左子树


      if (NULL != p -> pRight)//判断右子树是否为空


      {frist( p -> pRight)}// 递归遍历右子树


    }

}


IN(stuck pNode * p)//中序
{
   if (NULL != p)//判断树是否为空
    {
     
      
      if(NULL != p -> pLeft)//判断 左子树是否为空


      { frist(p -> pLeft) }//递归遍历左子树

       printf("%c", p -> data)// 输出根节点

      if (NULL != p -> pRight) //判断右子树是否为空


      {frist( p -> pRight)}//递归遍历右子树


    }

}

BOTTOM(stuck pNode * p)//后序遍历
{
   if (NULL != p) //判断树是否为空
    {
     
      
      if(NULL != p -> pLeft)//判断左子树是否为空


      { frist(p -> pLeft) }//递归遍历左子树

      


      if (NULL != p -> pRight)//判断右子树是否为空


      {frist( p -> pRight)}//递归遍历右子树


      printf("%c", p -> data)//输出根节点

    }

}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值